举例有表Cailiao如下:
项目 金属 辅料 玻璃
来料 21.5 24.64 1.146046512
合格 17.8 21.12 1.186516854
不及格 26.5 29.92 1.129056604
如何用SQL一次转换成如下:
项目 来料 合格 不及格
金属 21.5 17.8 26.5
辅料 24.64 21.12 29.92
玻璃 1.146046512 1.186516854 1.129056604
各位大侠多指点,谢谢
SELECT 材料 AS 项目, [来料], [合格], [不及格]
FROM
(
SELECT 项目, 材料, 数值
FROM
(
SELECT 项目, 金属, 辅料, 玻璃
FROM Cailiao
) AS src
UNPIVOT
(
数值 FOR 材料 IN (金属, 辅料, 玻璃)
) AS unpvt
) AS base
PIVOT
(
MAX(数值) FOR 项目 IN ([来料], [合格], [不及格])
) AS pvt;
授人以渔。
这类问题,AI几秒出结果。
pivot只能转一列,有没可以一次转多列的?
sql 拼接
每一列都case when一下,然后根据key行合并成一行,最后union一下
SELECT
项目类型 AS 项目,
[来料], [合格], [不及格]
FROM (
SELECT
项目 AS 状态,
项目类型,
数值
FROM Cailiao
UNPIVOT (
数值 FOR 项目类型 IN (金属, 辅料, 玻璃)
) AS UnpivotTable
) AS SourceTable
PIVOT (
MAX(数值)
FOR 状态 IN ([来料], [合格], [不及格])
) AS PivotTable
ORDER BY 项目类型;
最终不就是这个二维数组要被拿来使用,你用的时候行列下标反过来取数就好了,为啥非要用sql转呢?