2014-03-27 49 views
0

我有一點點實現級聯多行的XML PATH方法麻煩來連接多個領域。所以,給出下表,測試使用XML PATH

ID Type 
1 boy 
2 boy 
3 boy 
1 girl 
2 girl 
3 man 
3 woman 

查詢是:

SELECT DISTINCT a.ID, 
    (
     SELECT b.Type + ',' 
     FROM Test as b 
     WHERE a.Type = b.Type 
     for XML PATH ('') 
    ) 
FROM Test as a 

而是返回的:

ID Type 
1 boy,girl,man, 
2 boy,girl, 
3 boy,girl,woman 

它,而不是返回此:

ID Type 
1 boy,boy,boy, 
1 girl,girl, 
2 boy,boy,boy, 
2 girl,girl, 
3 boy,boy,boy, 
3 man, 
3 woman, 

這是怎麼回事?

回答

0

你加入了錯誤的領域。

嘗試

SELECT DISTINCT a.ID, 
    (
     SELECT b.Type + ',' 
     FROM Test as b 
     WHERE a.ID = b.ID 
     for XML PATH ('') 
    ) 
FROM Test as a 
+0

事實上我!謝謝。 –

0

而不是使用DISTINCT喜歡使用GROUP BY是這樣的......

SELECT a.ID, 

    STUFF((SELECT ', ' + [Type] [text()] 
      FROM Test 
      WHERE ID = a.[ID] 
      for XML PATH (''),TYPE). 
      value('.','NVARCHAR(MAX)'),1,2,'') AS [Type] 

FROM Test as a 
GROUP BY a.ID 
+0

這樣做有沒有性能優勢? –

+0

@ lunarplasma肯定是使用group而不是DISTINCT可以給你更好的性能。 –