日期:2014-05-17 浏览次数:20672 次
declare @test table(col1 varchar(1),col2 int,col3 varchar(3))
insert into @test
select 'A',1,'' union all
select 'A',1,'001' union all
select 'A',2,'006' union all
select 'A',2,'003' union all
select 'B',1,'007' union all
select 'B',1,'005'
select * from
(
select t.col1,
t.col2,
col3=(case when isnull(t.col3,'')<>'' then
stuff((select ','+col3 from @test
where isnull(col3,'')<>''
and t.col1=col1
and t.col2=col2 for xml path('')),1,1,'')
else t.col3 end)
from @test t
)tt
group by col1,col2,col3
/*
col1 col2 col3
---- ----------- -------------
A 1
A 1 001
A 2 006,003
B 1 007,005
*/
------解决方案--------------------
declare @T table (字段1 varchar(1),字段2 int,字段3 varchar(3))
insert into @T
select 'A',1,null union all
select 'A',1,'001' union all
select 'A',2,'006' union all
select 'A',2,'003' union all
select 'B',1,'007' union all
select 'B',1,'005'
select
字段1,字段2,[字段3]
from @T where 字段3 is null
union all
select
字段1,字段2,[字段3]=
stuff((select ','+字段3 from @T t
where 字段2=a.字段2 and 字段1=a.字段1 for xml path('')), 1, 1, '')
from @T a where 字段3 is not null
group by 字段1, 字段2
/*
字段1 字段2 字段3
---- ----------- ------------
A 1 NULL
A 1 001
A 2 006,003
B 1 007,005
*/