SQL Server :如何将行转置为列



在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;

注意:

  • 不要使用单引号作为列名,请改用方括号。

最新更新