2013-03-22 87 views
7

下面的代碼(我從here得到的)在將多個字段用逗號分隔的字段之間做了很好的合併。使用回車換行將多行合併到一列中

select player, 
    stuff((SELECT distinct ', ' + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH('')),1,1,'') 
from yourtable t1 
group by player 

我需要替換回車換行符逗號。我嘗試了下面的代碼,但它開始用這些字符分隔條目:「#x0D;」

select player, 
    stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH('')),1,1,'') 
from yourtable t1 
group by player 

我懷疑問題是與 「FOR XML PATH( '')),1,1, ''」,但我不知道是什麼值放。

任何幫助將不勝感激。

謝謝!

回答

8

你實際上可以用STUFF的結果替換逗號。

試試這個:

select player, 
    replace(stuff((SELECT distinct ', ' + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH('')),1,1,''), ',', char(13) + char(10)) 
from yourtable t1 
group by player 
+0

它的工作!謝謝! :) – Osprey 2013-03-22 14:40:47

+0

如何去換行而不是逗號? – 2018-03-08 10:38:14

3

可以處理所有的特殊字符XML增加(其中#x0D;就是其中之一)使用:

FOR XML PATH(''), TYPE).value('.','nvarchar(max)') 

更多信息here

你還需要的STUFF第三個參數調整到你需要在你的結果開始跳過(在這種情況下,以2因爲你有char(13)char(10))的字符數。

所以,你的解決方案是:

select player, 
    stuff((SELECT distinct CHAR(13)+CHAR(10) + cast(score as varchar(10)) 
     FROM yourtable t2 
     where t2.player = t1.player 
     FOR XML PATH(''), TYPE).value('.','nvarchar(max)'),1,2,'') 
from yourtable t1 
group by player