分组后将所有行拼接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>
View Code

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>
View Code

 

5、把subject列转换成xml格式(无节点)

select subject from AAA_Test a for xml path('')

<subject>语文</subject>
<subject>数学</subject>
<subject>语文</subject>
<subject>英语</subject>
<subject>物理</subject>
View Code

 

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
李四    语文,英语
王五    物理
张三    语文,数学

 

posted @ 2020-11-24 11:18  江境纣州  阅读(152)  评论(0编辑  收藏  举报