Sql server 使用回车换行符将多行合并为一列

Sql server 使用回车换行符将多行合并为一列,sql-server,Sql Server,下面的代码(我从中获得)很好地将多个用逗号分隔的字段合并在一起 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 我需要用回车换行符替换逗号。我

下面的代码(我从中获得)很好地将多个用逗号分隔的字段合并在一起

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;”

我怀疑问题出在“FOR-XML路径(“”)),1,1,”,但我不知道应该放什么值

任何帮助都将不胜感激


谢谢

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

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

FOR XML PATH(''), TYPE).value('.','nvarchar(max)')
更多信息

您还需要将
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

换一行而不是逗号怎么样?
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