高手请进,请教一个sql
如我现在的表结构Test为
ID DATA
1 A
1 B
2 C
2 D
2 E
2 F
希望将其转换Test2为
ID DATA
1 A,B
2 C,D,E,F
------解决方案--------------------create table test(id int,data varchar(10))
insert into test
select 1, 'A '
union all select 1, 'B '
union all select 2, 'C '
union all select 2, 'D '
union all select 2, 'E '
union all select 2, 'F '
create function f_test(@id int)
returns varchar(20)
as
begin
declare @s varchar(20)
select @s= ' '
select @s=@s+data+ ', ' from test where id=@id
select @s=left(@s,len(@s)-1)
return @s
end
select id,dbo.f_test(id) data from test group by id
------解决方案--------------------create table Test(ID int, DATA char(1))
insert Test select 1, 'A '
union all select 1, 'B '
union all select 2, 'C '
union all select 2, 'D '
union all select 2, 'E '
union all select 2, 'F '
select ID, DATA=cast(DATA as varchar(100)) into #T
from Test
order by ID, DATA
declare @ID int, @DATA varchar(100)
update #T set
@DATA=case when ID=@ID then @DATA+ ', '+DATA else DATA end,
@ID=ID,
DATA=@DATA
select ID, DATA=max(DATA)
from #T
group by ID
--result
ID DATA
----------- -------------
1 A,B
2 C,D,E,F
(2 row(s) affected)