【急需!谢谢】成绩表 输出的每位学生对应的成绩 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 行受影响)
*/
[其他解释]
在程序里操作xml吧,sql很难实现。
[其他解释]
select * from @tb for xml raw
[其他解释]
可是这样不是我需要的格式啊,你输出的结果是三行,我要的是如下格式的:
<row name="张三">
<Name>
<Course>物理</Course>
<Score>70</Score>
<Course>化学</Course>
<Score>80</Score>
</Name>
</row>
[其他解释]
对对,我现在才发现,应该要在XML里面操作。可问题是我不知道怎么操作,能否提供一个例子给我,或者给我示范下怎么操作?
[其他解释]
你用什么语言编程?c#操作xml的资料网上多的是。
[其他解释]
就是C#..应该是我啥都不懂把。我网上看到的貌似没有发现关于对dataset数据进行新架构设置而输出XML格式的资料。能否提供下