利用XML聚合字符串

--创建表和测试数据
create table dbo.SumStr(groupid  varchar(10),string  varchar(10));  
insert into dbo.SumStr(groupid,string) values('a','stra1');
insert into dbo.SumStr(groupid,string) values('a','stra2');
insert into dbo.SumStr(groupid,string) values('b','strb1');
insert into dbo.SumStr(groupid,string) values('b','strb2');
insert into dbo.SumStr(groupid,string) values('b','strb3');
insert into dbo.SumStr(groupid,string) values('b','strb4');
insert into dbo.SumStr(groupid,string) values('c','strc1');
insert into dbo.SumStr(groupid,string) values('c','strc2');
insert into dbo.SumStr(groupid,string) values('c','strc3');
--xml聚合
select 
a.groupid,  
(select ','+ string from dbo.SumStr b where b.groupid = a.groupid for xml path('')) as string
from dbo.SumStr a 
group by a.groupid
--结果
/*
groupid        string
a            ,stra1,stra2
b            ,strb1,strb2,strb3,strb4
c            ,strc1,strc2,strc3
*/
--去掉最前面的逗号
select c.groupid,stuff(c.string,1,1,'') as string
from 
(
    select 
    a.groupid,  
    (select ','+ string from dbo.SumStr b where b.groupid = a.groupid for xml path('')) as string
    from dbo.SumStr a 
    group by a.groupid
) c 
--结果
/*
groupid        string
a            stra1,stra2
b            strb1,strb2,strb3,strb4
c            strc1,strc2,strc3
*/

猜你喜欢

转载自blog.csdn.net/lujichao520/article/details/46842425