DDR爱好者之家 Design By 杰米

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


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

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

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

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

drop table tb

3、使用游标合并数据

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

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,1,1,'')) 
  select @s = ',' + cast(@value as varchar) , @id_old = @id
  end
 fetch my_cursor into @id , @value END 
 insert @t values(@id_old , stuff(@s,1,1,''))
 close my_cursor
 deallocate my_cursor
 select * from @t
drop table tb

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

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?