SQL大师来,问个查询语句
表结构和内容如下
Name--Age--NO--Remark
A--11--11--ABC
A--11--11--CCC
A--11--11--AAA
B--11--11--CCC
B--11--11--DDD
=======================================================
查询后的结果为
Name--Age--NO--Remark
A--11--11--ABC,CCC,CCC
B--11--11--CCC,DDD
就是前面三列数据重复的合并,后面一列不同的串起来。
重复的可能是2行,3行,或是更多行,求解。
补充一句,最后一列Remark会有NULL值,和前面是同样的处理方式,前三列合并,后面的就不用串起来了,还是写NUll
[解决办法]
if object_id('[tb]') is not null drop table [tb]gocreate table [tb]([Name] varchar(1),[Age] int,[NO] int,[Remark] varchar(3))insert [tb]select 'A',11,11,'ABC' union allselect 'A',11,11,'CCC' union allselect 'A',11,11,'AAA' union allselect 'B',11,11,'CCC' union allselect 'B',11,11,'DDD' union allselect 'A',11,11,NULLgoselect name,age,no, remark=stuff((select ','+remark from tb where remark is not null and name=t.name and age=t.age and no=t.no for xml path('')),1,1,'')from tb twhere remark is not nullgroup by name,age,noUNION ALLSELECT * FROM TB WHERE REMARK IS NULL/**name age no remark---- ----------- ----------- -----------------------A 11 11 ABC,CCC,AAAB 11 11 CCC,DDDA 11 11 NULL(3 行受影响)**/