mssql sqlserver 使用循环的方式对字符串进行聚合拼接


摘要:
下文讲述使用sql脚本对字符串进行拼接的方法分享,如下所示:
适用环境:所有sqlserver版本


众所周知,sqlserver早期版本中没有字符串聚合函数,下文将讲述使用循环的方式对字符串进行拼接,如下所示:


实现思路:
主要采用goto遍历叠加字段,
遍历聚合字段时,使用charindex检测聚合单个字符串是否被聚合,如果未聚合就进行聚合叠加

create table [maomao365] (
    book_id int identity(1,1) primary key,
    book_name varchar(20),
    book_price float,
    book_auth varchar(10)
);
--插入测试数据
insert into [maomao365] (book_name,book_price,book_auth)
                    values
                        ('猫猫小屋',25.6,'孔子'),
                        ('sqlblog',25.6,'金庸'),
                        ('经典sqlserver站1',32.7,'金庸'),
                        ('经典sqlserver站2',32.7,'金庸'),
                        ('平凡的世界',35.8,'路遥'),
                        ('史记',54.8,'司马迁');
                        
---建立临时表 
  declare @t table(
  book_auth varchar(10),
  priceSum decimal(18,2)
  ,book_name nvarchar(100)
  )
 

insert @t
select book_auth,sum(book_price),MAX(book_name) name
from [maomao365]
group by book_auth
 
  
gogo:
update @t
set book_name += (','+ a.book_name)
from [maomao365] a,@t b
where a.book_auth = B.book_auth 
and CHARINDEX(a.book_name,b.book_name) = 0
if @@ROWCOUNT > 0
begin
    GOTO gogo
end

select * from @t as t 

go

truncate table [maomao365]; 
drop     table [maomao365];
go