zd1 zd2 zd3 zid4
1 A B AA
1 A B BB
2 C Q CC
2 C Q null
2 C Q DD
如何得到如下结果(即第四个字段根据前3个字段来连接第四个字段的所有值):
1 A B AA BB (AA和BB之间用换行符连接)
2 C Q CC DD
在网上百度了很多,基本都是单条件的(即根据1个字段而不是根据几个字段组合),以下是网上找的,但是不知道该怎么修改,哪位能帮忙改一下
create table tb(a varchar(20))
insert tb values ('1')
insert tb values ('2')
insert tb values ('3')
insert tb values ('4')
insert tb values ('5')
go
--方法一
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql + t.a + '@' from (select a from tb) as t
set @sql='select result = ''' + left(@sql , len(@sql) - 1) + ''''
exec(@sql)
drop table tb
/*
result
---------
1@2@3@4@5
*/
2 个解决方案
#1
if OBJECT_ID('tempdb..#ta') > 0
drop table #ta
create table #ta
(zd1 int, zd2 varchar(10), zd3 varchar(10), zid4 varchar(10))
insert into #ta values
(1, 'A', 'B', 'AA'),
(1, 'A', 'B', 'BB'),
(2, 'C', 'Q', 'CC'),
(2, 'C', 'Q', null),
(2, 'C', 'Q', 'DD')
select
zd1
,zd2
,zd3
,zd4=(
select zid4 + ' ' from #ta where zd1 = a.zd1 for xml path('')
)
from
#ta a
group by zd1,zd2,zd3
#2
非常谢谢你的帮助!
#1
if OBJECT_ID('tempdb..#ta') > 0
drop table #ta
create table #ta
(zd1 int, zd2 varchar(10), zd3 varchar(10), zid4 varchar(10))
insert into #ta values
(1, 'A', 'B', 'AA'),
(1, 'A', 'B', 'BB'),
(2, 'C', 'Q', 'CC'),
(2, 'C', 'Q', null),
(2, 'C', 'Q', 'DD')
select
zd1
,zd2
,zd3
,zd4=(
select zid4 + ' ' from #ta where zd1 = a.zd1 for xml path('')
)
from
#ta a
group by zd1,zd2,zd3
#2
非常谢谢你的帮助!