2014-09-10 135 views
0

我已經廣泛搜索這種類型的分辨率,但一直未能找到任何可行的方法。將多個查詢結果組合成一行並添加列

這裏是我的數據:

Table1 

co_num | item id 

L11400 | widget1 

L11400 | widget2 

L11400 | widget3 

L11401 | widget1 

L11401 | widget2 

我想查詢表,並返回這樣的數據:

co_num | itemid1 | itemid2 | itemid3 

L11400 | widget1 | widget2 | widget3 

L11401 | widget1 | widget2 | (blank) 

這可能嗎?我正在使用SQL 2008.它需要是動態的,因爲項目的數量可能會有所不同。如果這可能會在查看/查詢中失敗,那將是最好的。

感謝

+0

查看sql server動態數據透視表。 – Mihai 2014-09-10 22:28:12

+0

@Mhaihai我有和似乎無法得到正確的語法。我會再看看。 – cdohn 2014-09-10 22:30:13

+0

至少把一個sqlfiddle。 – Mihai 2014-09-10 22:31:02

回答

1

SQL Fiddle

MS SQL Server 2008的架構設置

查詢1

DECLARE @TABLE TABLE(co_num VARCHAR(20),itemid VARCHAR(20)) 
INSERT INTO @TABLE VALUES 
('L11400','widget1'), 
('L11400','widget2'), 
('L11400','widget3'), 
('L11401','widget1'), 
('L11401','widget2') 

SELECT * 
FROM (
    SELECT * 
      ,'ItemID' + CAST(ROW_NUMBER() OVER (PARTITION BY co_num 
              ORDER BY itemid) AS VARCHAR(10)) Items 
    FROM @TABLE 
    ) t 
PIVOT (MAX(itemid) 
     FOR Items 
     IN ([ItemID1],[ItemID2],[ItemID3]) 
     )p 

Results

| CO_NUM | ITEMID1 | ITEMID2 | ITEMID3 | 
|--------|---------|---------|---------| 
| L11400 | widget1 | widget2 | widget3 | 
| L11401 | widget1 | widget2 | (null) | 
+0

完美!我的查詢最終變得稍微複雜一些,但這讓我需要去哪裏。謝謝! – cdohn 2014-09-11 13:17:36

相關問題