2015-04-16 44 views
2

比方說,我們有一個表:
SQL連接 - 一個場分成兩個根據ID

ID | ItemId | Value | 
1 | 201 | Green | 
2 | 301 | Wood | 
2 | 201 | Red | 
4 | 201 | Green | 
1 | 301 | Iron | 

所以{項目Id:類型} - > {201:顏色},{301:材質}

有沒有辦法生成下面的結果集?

ID | Color | Material | 
1 | Green | Iron  | 
2 | Red | Wood  | 
4 | Green | (null) | 

所以取決於ItemId,就把Value在第1列或2

+0

查找「crosstab」或「pivot」。 –

回答

1

可以通過使用CASE...WHEN,以選擇性地識別結果列模擬的樞軸。您需要我們用一個總結合(這將剝離出空值),最後GROUP BY壓縮行:

SELECT ID, 
     MIN(CASE WHEN ItemId = 201 THEN Value ELSE NULL END) AS Color, 
     MIN(CASE WHEN ItemId = 301 THEN Value ELSE NULL END) AS Material 
FROM MyTable 
GROUP BY ID 
ORDER BY ID ASC; 

SqlFiddle here

1

您可以使用case搶根據Value s到的ItemId值,然後group byID聚集兩排,在一個相同的ID,同時使用max(或其他聚合函數)排除null值:

select ID 
    , max(case when ItemId = 201 then Value end) as Color 
    , max(case when ItemId = 301 then Value end) as Material 
from tbl 
group by ID