【急需!谢谢】成绩表 输出的每位学生对应的成绩 XML 格式
已知:
成绩表
Name Course Score
张三物理70
张三化学80
李四地理78
李四物理88
王五物理67
王五化学89
求:能够得出以下结果的SQL语句
结果一(输出格式):
<row name="张三">
<Name>
<Course>物理</Course>
<Score>70</Score>
<Course>化学</Course>
<Score>80</Score>
</Name>
</row>
<row name="李四">
<Name>
<Course>地理</Course>
<Score>78</Score>
<Course>物理</Course>
<Score>88</Score>
</Name>
</row>
<row name="王五">
<Name>
<Course>物理</Course>
<Score>67</Score>
<Course>化学</Course>
<Score>89</Score>
</Name>
</row>
结果二:
<row name="张三">
<Name>
<物理>70</物理>
<化学>80</化学>
</Name>
</row>
<row name="李四">
<Name>
<地理>78</地理>
<物理>88</物理>
</Name>
</row>
<row name="王五">
<Name>
<物理>67</物理>
<化学>89</化学>
</Name>
</row>
[最优解释]
row 属性中有name了 还要个name元素干嘛啊
结果1
DECLARE @tb TABLE(NAME VARCHAR(20),Course VARCHAR(20),Score INT)
INSERT INTO @tb
select'张三','物理', 70 union all
select'张三','化学' ,80 union all
select'李四','地理', 78 union all
select'李四','物理' ,88 union all
select'王五','物理', 67 union all
select'王五','化学', 89
DECLARE @str NVARCHAR(4000)=''
SELECT name+xmlStr+e FROM (
SELECT name='<row NAME='''+NAME+'''><Name>',xmlStr=(SELECT Course,Score FROM @tb WHERE t1.NAME=NAME FOR XML PATH('')),
e='</Name></row>'
FROM @tb t1
GROUP BY t1.NAME
) t
/*
------------------------------------------------
<row NAME='李四'><Name><Course>地理</Course><Score>78</Score><Course>物理</Course><Score>88</Score></Name></row>
<row NAME='王五'><Name><Course>物理</Course><Score>67</Score><Course>化学</Course><Score>89</Score></Name></row>
<row NAME='张三'><Name><Course>物理</Course><Score>70</Score><Course>化学</Course><Score>80</Score></Name></row>
(3 行受影响)
*/
[其他解释]