首页 新闻 会员 周边 捐助

请教下SQL如何进行如下行列转换?

0
悬赏园豆:10 [已解决问题] 解决于 2025-09-14 10:34

举例有表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

各位大侠多指点,谢谢

herry507的主页 herry507 | 菜鸟二级 | 园豆:244
提问于:2025-05-23 22:37
< >
分享
最佳答案
0

SELECT 材料 AS 项目, [来料], [合格], [不及格]
FROM
(
SELECT 项目, 材料, 数值
FROM
(
SELECT 项目, 金属, 辅料, 玻璃
FROM Cailiao
) AS src
UNPIVOT
(
数值 FOR 材料 IN (金属, 辅料, 玻璃)
) AS unpvt
) AS base
PIVOT
(
MAX(数值) FOR 项目 IN ([来料], [合格], [不及格])
) AS pvt;

收获园豆:10
忙忙碌碌但一无所获 | 菜鸟二级 |园豆:219 | 2025-06-20 10:49
其他回答(5)
0

授人以渔。

这类问题,AI几秒出结果。

talentzemin | 园豆:862 (小虾三级) | 2025-05-24 09:04

pivot只能转一列,有没可以一次转多列的?

支持(0) 反对(0) herry507 | 园豆:244 (菜鸟二级) | 2025-05-25 11:34
0

sql 拼接

Tom.汤 | 园豆:3073 (老鸟四级) | 2025-05-26 15:58
0

每一列都case when一下,然后根据key行合并成一行,最后union一下

OLOzzzZ | 园豆:202 (菜鸟二级) | 2025-05-26 20:31
0

SELECT
项目类型 AS 项目,
[来料], [合格], [不及格]
FROM (
SELECT
项目 AS 状态,
项目类型,
数值
FROM Cailiao
UNPIVOT (
数值 FOR 项目类型 IN (金属, 辅料, 玻璃)
) AS UnpivotTable
) AS SourceTable
PIVOT (
MAX(数值)
FOR 状态 IN ([来料], [合格], [不及格])
) AS PivotTable
ORDER BY 项目类型;

搬砖的孟达 | 园豆:202 (菜鸟二级) | 2025-05-28 09:19
0

最终不就是这个二维数组要被拿来使用,你用的时候行列下标反过来取数就好了,为啥非要用sql转呢?

茂茂 | 园豆:2904 (老鸟四级) | 2025-07-16 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册