4. 接下来是处理其中的xml 节点,有没有办法可以直接去掉对应的 【学科】也就是 <subject></subject>的标签呢
select convert(varchar, [subject])
from Score b
where 1=1
and b.Student=N'李四'
for xml path
根据如上sql脚本,
主要是使用了convert函数,将subject 列改为【
无列名】
这种方式就会取消 <subject>标签显示,当然其他任意方式都可以。只要是无列名即可。
效果如下图
这就取消掉了xml中 subject显示
5. 接下来是考虑 如何取消 row标签的显示呢?
SQL Server 提供的 for xml path 中,如果 在path() 后 修改为如 path('myrow') 则可以修改 <row>标签显示。
select convert(varchar, [subject])
from Score b
where 1=1
and b.Student=N'李四'
for xml path ('myrow')
效果图如下
使用SQL Server 的函数 stuff 即可,stuff函数这里就不具体讲了。
select subjects=stuff((select ','+convert(varchar, [subject])
from Score b
where 1=1
and b.Student=N'李四'
for xml path('')), 1, 1, '')
效果如下图
10 接下来只需要将以上脚本放入 我们主查询的语句中即可。
放入我们select的子查询脚本中
select
,Subjects=stuff((select ','+convert(varchar, [subject])
from Score b
where 1=1
and b.Student= a.Student
for xml path('')), 1, 1, '')
Score a
效果如下图
11. 这时候直接进行 group by语句就好了
select
Student
,Subjects=stuff((select ','+convert(varchar, [subject])
from Score b
where 1=1
and b.Student= a.Student
for xml path('')), 1, 1, '')
,totalScore=SUM(score)
Score a
group by Student
效果如下图