2017-07-05 29 views
1

我有一個1:M記錄集,我需要將其轉換爲結果連接的列。SQL數據透視表1:將M行轉換爲字符串列

創建示例數據:

CREATE TABLE #temptable 
(
    ID int, 
    Division int, 
    Material int 
); 

insert into #temptable 
Values 
(999, 1, 1) 
,(999, 1, 2) 
,(999, 1, 3) 
,(999, 2, 1) 
,(999, 2, 6) 
,(999, 3, 2) 

的樣本數據:

ID  Division  Material 
---- ---------- ---------- 
999  1   1   
999  1   2 
999  1   3 
999  2   1 
999  2   6 
999  3   2 

我需要的結果是這樣的,其中每個部門的材料連接在一起:

ID Division-1 Division-2 Division-3 
---- ---------- ---------- ---------- 
999  1,2,3   1,6   2 
+3

你嘗試過什麼嗎? –

+0

什麼版本的SQL? – Shawn

+0

Kamran在下面的答案解決了這個問題。 – ScottM

回答

1

試試這個:

SELECT ID, 
     [1] AS 'Division-1', 
     [2] AS 'Division-2', 
     [3] AS 'Division-3' 
FROM 
(
    SELECT DISTINCT 
      a.ID, 
      a.Division, 
      LEFT(r.ResourceName, LEN(r.ResourceName) - 1) ResourceName 
    FROM #temptable a 
     CROSS APPLY 
    (
     SELECT CAST(Material AS VARCHAR(10))+',' 
     FROM #temptable t 
     WHERE a.[ID] = t.[ID] 
       AND a.Division = t.Division 
     FOR XML PATH('') 
    ) r(ResourceName) 
) src PIVOT(MAX(ResourceName) FOR Division IN([1], 
               [2], 
               [3])) piv; 

簡要解釋 我們需要通過逗號分隔的結構創建支點。

下面的查詢將列值轉換爲以逗號分隔的行。

SELECT a.ID, 
     a.Division, 
     LEFT(r.ResourceName, LEN(r.ResourceName) - 1) ResourceName 
FROM #temptable a 
    CROSS APPLY 
(
    SELECT CAST(Material AS VARCHAR(10))+',' 
    FROM #temptable t 
    WHERE a.[ID] = t.[ID] 
      AND a.Division = t.Division 
    FOR XML PATH('') 
) r(ResourceName); 

之後,我們創建了關鍵點。

+0

這非常出色,超越了我的功夫水平。非常感謝你。 – ScottM

+0

@ScottM:如果有幫助,將其標記爲答案,以防人們偶然發現 –