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  

效果如下图