加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 09:56:40 所属栏目:MsSql教程 来源:网络整理
导读:标题:按某字段合并字符串之一(简单合并) 描述:将如下形式的数据按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 的和(字符串相

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


描述:将如下形式的数据按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中只能用自定义的函数解决

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中的方法

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、使用游标合并数据

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语句的介绍。希望对大家有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读