基于一些谷歌搜索我想出了这个:
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
这是最好的做事方式吗?谢谢!
基督教
答案 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
字段,那么最好使用它。
如果数据保证不包含任何字符,例如<
,>
,&