将具有相同id的字符串折叠到逗号分隔列表中

时间:2011-05-11 10:18:57

标签: sql-server tsql

基于一些谷歌搜索我想出了这个:

drop table #temp
create table #temp
(
    id int,
    name nvarchar(max)
)

insert into #temp (id,name) values (1,'bla1')
insert into #temp (id,name) values (1,'bla2')
insert into #temp (id,name) values (3,'bla3')

;with cte1 as
(
    select id, stuff((select ', ' + CAST(t2.name as nvarchar(max))
         from #temp t2 where t1.id = t2.id
         for xml path('')),1,1,'') name
    from #temp t1
)
select id, name from cte1 group by id, name

这是最好的做事方式吗?谢谢!

基督教

1 个答案:

答案 0 :(得分:2)

这种方法略好一些,因为它只是id而不是id,name

;WITH cte AS
(
SELECT DISTINCT id 
FROM #temp
)
SELECT id, STUFF((SELECT ', ' + CAST(t2.name AS NVARCHAR(MAX))
     FROM #temp t2 WHERE t1.id = t2.id
     FOR XML PATH('')),1,1,'') name
FROM cte t1

如果您的表格中只包含不同的id字段,那么最好使用它。

如果数据保证不包含任何字符,例如<>&

,则您使用的方法才能正常运行