分组字符合并SQL语句 按某字段合并字符串之一(简单合并)

前端之家收集整理的这篇文章主要介绍了分组字符合并SQL语句 按某字段合并字符串之一(简单合并)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

标题:按某字段合并字符串之一(简单合并)


描述:将如下形式的数据按id字段合并value字段。
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id value
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id,求 value 的和(字符串相加)

1、sql2000中只能用自定义函数解决

sql;"> create table tb(id int,value varchar(10))

insert into tb values(1,'aa')
insert into tb values(1,'bb')
insert into tb values(2,'aaa')
insert into tb values(2,'bbb')
insert into tb values(2,'ccc')
go

create function dbo.f_str(@id int)
returns varchar(100)
as
begin

declare @str varchar(1000)
set @str='' select @str=@str+''+cast(value as varchar)
from tb where id = @id
set @str=right(@str,len(@str) - 1)
return @str
end
go

--调用函数

select id,value = dbo.f_str(id) from tb group by id

drop function dbo.f_str

drop table tb

2、sql2005中的方法

sql;"> create table tb(id int,'ccc') go

select id,[value] = stuff((select ',' + [value] from tb t where id = tb.id
for xml path('')),1,'')from tb group by id

drop table tb

3、使用游标合并数据

sql;"> create table tb(id int,value varchar(10)) insert into tb values(1,'ccc') go

declare @t table(id int,value varchar(100))
--定义结果集表变量
--定义游标并进行合并处理

declare my_cursor cursor local for
select id,value from tb
declare @id_old int,@id int,@value varchar(10),@s varchar(100)
open my_cursor fetch my_cursor into @id,@value
select @id_old = @id,@s=''while @@FETCH_STATUS = 0
begin
if @id = @id_old
select @s = @s + ',' + cast(@value as varchar) else
begin
insert @t values(@id_old,stuff(@s,''))
select @s = ',' + cast(@value as varchar),@id_old = @id
end
fetch my_cursor into @id,@value END
insert @t values(@id_old,''))
close my_cursor
deallocate my_cursor
select * from @t
drop table tb

以上就是关于分组字符合并sql语句的介绍。希望对大家有所帮助。

猜你在找的MsSQL相关文章