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

SQL Server 2012中使用FOR XML实现PART_NO嵌套SUPPLIER_PART_NO

在SQL Server 2012中用FOR XML实现嵌套XML输出

刚好我之前也处理过类似的需求,针对你的场景,用FOR XML PATH结合子查询就能完美实现你要的嵌套XML结构。先确认下你的数据源结构:

PART_NOSUPPLIER_PART_NO
AAA1
AAA2
BBB3
BBB4
BBB5

你想要的输出大概是这样的嵌套结构:

<root>
  <item PartNo="AAA">
    <SupplierPartNo>1</SupplierPartNo>
    <SupplierPartNo>2</SupplierPartNo>
  </item>
  <item PartNo="BBB">
    <SupplierPartNo>3</SupplierPartNo>
    <SupplierPartNo>4</SupplierPartNo>
    <SupplierPartNo>5</SupplierPartNo>
  </item>
</root>

直接上可用的SQL查询,记得把YourTableName替换成你实际的表名:

SELECT 
    PART_NO AS '@PartNo', -- 将PART_NO作为item节点的属性
    -- 子查询生成当前PART_NO对应的所有SupplierPartNo节点
    (SELECT 
         SUPPLIER_PART_NO AS 'text()'
     FROM YourTableName t2
     WHERE t2.PART_NO = t1.PART_NO
     FOR XML PATH('SupplierPartNo'), TYPE)
FROM YourTableName t1
GROUP BY PART_NO -- 按PART_NO分组,确保每个PART_NO只生成一个item节点
FOR XML PATH('item'), ROOT('root') -- 包装成item节点,并添加root根节点

简单解释下逻辑:

  • 主查询通过GROUP BY PART_NO确保每个零件号只生成一个<item>父节点,同时用AS '@PartNo'把零件号设置为节点属性。
  • 子查询针对每个父节点的PART_NO,筛选出所有对应的供应商零件号,用FOR XML PATH('SupplierPartNo')生成一个个<SupplierPartNo>子节点,TYPE参数是关键,它能让子查询的XML结果正确嵌套到主结构里,而不是被转义成文本。
  • 最后主查询的FOR XML PATH('item'), ROOT('root')负责把所有item节点包裹在<root>根节点下,形成你要的完整结构。

内容的提问来源于stack exchange,提问作者Ritchie B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:30