sql2008某个字段根据其他几个字段组合来连接所有值(把某个字段的所有值按分组连接起来)

时间:2022-01-29 04:22:18
表名及字段:tb(zd1,zd2,zd3,zid4)

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


非常谢谢你的帮助!