下面的代码(我从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,''”,但我不知道要放什么值。
非常感谢任何帮助。
谢谢!
答案 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)