2011-04-19 48 views
3

好日子, 這裏就是我想要做的..給予「未包含在聚合函數」組自聯接和(SQL服務器)

ITEM | CATEGORY | AMOUNT 
Sponge   A    29 
Sponge   B    32 
Sponge   C    33 
Sponge   D    34 
Rod   A    1 
Rod   B    2 
Rod   C    3 
Rod   D    4 

而且我想要的輸出看像這樣:

ITEM | A | B | C | D 
Sponge  29  32  33  34 
Rod  1  2  3  5 

我一直在嘗試GROUP BY的各種組合,但我似乎無法得到它的工作。

回答

6
SELECT ITEM 
     ,MAX(CASE WHEN CATEGORY ='A' THEN Amount END) AS A 
     ,MAX(CASE WHEN CATEGORY ='B' THEN Amount END) AS B 
     ,MAX(CASE WHEN CATEGORY ='C' THEN Amount END) AS C 
     ,MAX(CASE WHEN CATEGORY ='D' THEN Amount END) AS D 
FROM YourTable 
GROUP BY ITEM 

或者

SELECT * 
FROM YourTable 
PIVOT (MAX(AMOUNT) FOR CATEGORY IN ([A],[B],[C],[D])) AS Pvt 
1
WITH q AS 
     (
     SELECT * 
     FROM (
       VALUES 
       ('Sponge', 'A', 29), 
       ('Sponge', 'B', 32), 
       ('Sponge', 'C', 33), 
       ('Sponge', 'D', 34), 
       ('Rod', 'A', 1), 
       ('Rod', 'B', 2), 
       ('Rod', 'C', 3), 
       ('Rod', 'D', 4) 
       ) q (item, category, amount) 
     ) 
SELECT * 
FROM q 
PIVOT (
     MAX(amount) 
     FOR  category IN ([A], [B], [C], [D]) 
     ) AS qp