日期:2014-05-18  浏览次数:20553 次

MSSQL,需要将A字段相同的,它的C字段去重合并
表结构
table1
A:nvarchar(50) not null
C:nvarchar(max) null (包含多值,以逗号分割)

因为我的table1,是从多个表中抽取出来的数据,A很多是重复,但是C中的数据并不一样,
如果,A='Affected',则我需要将所有A='Affected'的C中的数据抽合并,并且去掉重复值.
或者是,选定长度最大的C,用后面的C去一个一个匹配,无,则拼接上去

------解决方案--------------------
SQL code

--2005及以上版本
select A,stuff((select distinct ','+C from table1 where A=t.A for xml path('')),1,1,'') as C
from table1 t
group by A

------解决方案--------------------
SQL code
--字段1 字段2
--A 情报1
--A 情报2
--B 情报3


--想获得以下结果

--字段1 字段2
--A 情报1,情报2
--B 情报3 

declare @t table (字段1 varchar(50), 字段2  varchar(50) )
insert into @t values('A' ,'情报1')
insert into @t values('A' ,'情报2')
insert into @t values('B' ,'情报3')
 select 字段1,
stuff((select ','+字段2 from @t where 字段1=t.字段1 for xml path('')),1,1,'')  as 字段2
  from @t t group by 字段1


字段1                                                字段2
-------------------------------------------------- ----------------------------------------------------------------------------------------------------------------
A                                                  情报1,情报2
B                                                  情报3

(2 行受影响)