标题:按某字段合并字符串之一(简单合并)
描述:将如下形式的数据按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语句的介绍。希望对大家有所帮助。