[英]SQL Server : how to transpose rows into columns
在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;
注意 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.