簡體   English   中英

SQL Server:如何將行轉換為列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM