SQL Server:如何将行转换为列
在T-SQL中,我试图将某些行的值转换为列。SQL Server:如何将行转换为列,sql,sql-server,tsql,Sql,Sql Server,Tsql,在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
初始表格:
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;
注:
- 不要使用单引号作为列名,而是使用方括号李>
pvt中([X]、[Y]、[Z]、[W])机器的枢轴(最大(成本)