You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:12:03