基于SQL Server生成带Header和Details结构的XML输出求助
解决方案
要生成你需要的XML结构,不需要直接对全表做GROUP BY,而是通过嵌套FOR XML PATH的方式,先按ID分组生成外层的<DETAILS>节点,再在每个分组内生成对应的<S_HEADER>和<S_DETAILS>集合。
假设你的TRACK表中,同一个ID对应的TOTALMARKS值是一致的(如果不一致,可改用聚合函数如MAX(TOTALMARKS)确保每个ID只取一个有效值),可以用以下SQL语句:
SELECT -- 生成当前ID对应的<S_HEADER>节点 (SELECT ID AS 'ID', TOTALMARKS AS 'TOTALMARKS' FROM TRACK t2 WHERE t2.ID = t1.ID GROUP BY ID, TOTALMARKS FOR XML PATH('S_HEADER'), TYPE), -- 生成当前ID下的所有<S_DETAILS>节点 (SELECT SUBJECT AS 'SUBJECT', MARKS AS 'MARKS', CODE AS 'CODE' FROM TRACK t2 WHERE t2.ID = t1.ID FOR XML PATH('S_DETAILS'), TYPE) FROM TRACK t1 GROUP BY t1.ID, t1.TOTALMARKS FOR XML PATH('DETAILS'), ROOT('REPORT'), TYPE;
关键说明:
- 外层查询按
ID和TOTALMARKS分组,确保每个ID只生成一个<DETAILS>节点 - 第一个子查询用
GROUP BY保证每个ID仅输出一个<S_HEADER>(若同一ID的TOTALMARKS唯一,也可用TOP 1替代) - 第二个子查询拉取当前ID下的所有明细数据,生成多个
<S_DETAILS>节点 TYPE参数确保嵌套的XML节点不会被转义成文本,ROOT('REPORT')直接指定根节点
内容的提问来源于stack exchange,提问作者SATHK
相关产品推荐
相关产品推荐

