在T-SQL中,我试图将某些行的值转置为列。
初始表:
Project | Machine | Value
-------------------------
A X 100
A Y 99
A Z 98
A W 97
B X 97
B Y 96
B W 95
C X 95
C Z 94
我想要的结果:
Project MX MY MZ MW
-----------------------------
A 100 99 98 97
B 97 96 0 95
C 95 0 94 0
我创建了测试代码:
CREATE TABLE Company (project char(1), machine char(1), cost int)
GO
INSERT INTO Company
VALUES ('A', 'X', 100), ('A', 'Y', 99), ('A', 'Z', 98),
('A', 'W', 97), ('B', 'X', 97), ('B', 'Y', 96),
('B', 'W', 95), ('C', 'X', 95), ('C', 'Z', 94);
我的透视查询:
SELECT
project, 'X', 'Y', 'Z', 'W'
FROM
(SELECT
project, machine, cost
FROM
Company) p
PIVOT
(MAX(cost)
FOR machine IN ('X', 'Y', 'Z', 'W') AS pvt
我收到此错误:
"X"附近的语法不正确
我的透视查询有误吗?
提前致谢
如果你的机器有限,那么我会做条件聚合而不是PIVOT
:
SELECT Project,
MAX(CASE WHEN machine = 'X' THEN cost END) AS MX,
MAX(CASE WHEN machine = 'Y' THEN cost END) AS MY,
MAX(CASE WHEN machine = 'Z' THEN cost END) AS MZ,
MAX(CASE WHEN machine = 'W' THEN cost END) AS MW
FROM Company c
GROUP BY Project;
如果你想使用PIVOT
,那么我会修复缺少右括号的语法错误:
SELECT *
FROM (SELECT project, machine, cost
FROM Company
) AS p PIVOT
(MAX(cost)
FOR machine IN ([X], [Y], [Z], [W])
) AS pvt;
注意:
- 不要使用单引号作为列名,请改用方括号。