分组后将所有行拼接xml for path('')和stuff
1、建表
ID uniqueidentifier Unchecked Name nvarchar(64) Unchecked Subject nvarchar(64) Unchecked Score int Unchecked
2、数据
insert into AAA_Test values(NEWID(),'张三','语文',85) insert into AAA_Test values(NEWID(),'张三','数学',98) insert into AAA_Test values(NEWID(),'李四','语文',90) insert into AAA_Test values(NEWID(),'李四','英语',79) insert into AAA_Test values(NEWID(),'王五','物理',100)
3、for xml path('node')以node节点转换成xml格式
select * from AAA_Test a for xml path('node')
<node> <ID>69C97AE2-27AC-462D-B2EA-CA26E0F8C8D7</ID> <Name>张三</Name> <Subject>语文</Subject> <Score>85</Score> </node> <node> <ID>DB02E1B8-FB77-40D4-9862-BA37159B316A</ID> <Name>张三</Name> <Subject>数学</Subject> <Score>98</Score> </node> <node> <ID>2733AE1F-B97B-4F69-A057-3D8F099B1BF8</ID> <Name>李四</Name> <Subject>语文</Subject> <Score>90</Score> </node> <node> <ID>E05D0417-9D7D-45EB-B17B-8294D7EAD380</ID> <Name>李四</Name> <Subject>英语</Subject> <Score>79</Score> </node> <node> <ID>590BD9A3-CB32-4135-B712-D8CABAE3FD57</ID> <Name>王五</Name> <Subject>物理</Subject> <Score>100</Score> </node>
4、把subject列转换成xml格式(有节点)
select subject from AAA_Test a for xml path('node')
<node> <subject>语文</subject> </node> <node> <subject>数学</subject> </node> <node> <subject>语文</subject> </node> <node> <subject>英语</subject> </node> <node> <subject>物理</subject> </node>
5、把subject列转换成xml格式(无节点)
select subject from AAA_Test a for xml path('')
<subject>语文</subject> <subject>数学</subject> <subject>语文</subject> <subject>英语</subject> <subject>物理</subject>
6、把subject列转换成字符串格式(xml转换成字符串格式)
select ','+subject from AAA_Test a for xml path('')
,语文,数学,语文,英语,物理
7、分组获取字符串
select name, (select ',' + subject from AAA_Test a where T.name=a.name for xml path('')) from AAA_Test T
group by name
name subjects
李四 ,语文,英语
王五 ,物理
张三 ,语文,数学
8、去掉科目前逗号
name subjects
李四 语文,英语
王五 物理
张三 语文,数学