使用回车换行符将多行合并到一列中

时间:2013-03-22 14:17:51

标签: sql-server

下面的代码(我从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,''”,但我不知道要放什么值。

非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:11)

您实际上可以替换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

答案 1 :(得分:4)

您可以使用以下方法处理XML添加的所有特殊字符(其中#x0D;是一个):

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

更多信息here

您还需要将STUFF的第三个参数调整为您在结果开头时需要跳过的字符数(在这种情况下为2,因为您有char(13)和{{ 1}})。

所以你的解决方案是:

char(10)