标题:按某字段合并字符串之一(简单合并)
描述:将如下形式的数据按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中只能用自定义的函数解决
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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中的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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、使用游标合并数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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语句的介绍。希望对大家有所帮助。