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

11

下面的代码(我从这里获取)将多个字段合并在一起,用逗号分隔,做得很好。

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个回答

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

换行怎么样,不用逗号了? - Elbert John Felipe

4

您可以使用以下方法处理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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接