sql-server - SQL Server : FOR XML PATH - nesting/grouping

标签 sql-server for-xml-path

我的数据如下:

OrderID CustomerID  ItemID  ItemName
10000   1234        111111  Product A
10000   1234        222222  Product B
10000   1234        333333  Product C
20000   5678        111111  Product A
20000   5678        222222  Product B
20000   5678        333333  Product C

我想在 SQL Server 中编写一个 T-SQL 查询来返回如下数据:

<Root>
  <Order>
    <OrderID>10000</OrderID>
    <CustomerID>1234</CustomerID>
    <LineItem>
      <ItemID>11111</ItemId>
      <ItemName>Product A</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>22222</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>33333</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
  </Order>
  <Order>
    <OrderID>20000</OrderID>
    <CustomerID>5678</CustomerID>
    <LineItem>
      <ItemID>11111</ItemId>
      <ItemName>Product A</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>22222</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
    <LineItem>
      <ItemID>33333</ItemId>
      <ItemName>Product B</ItemName>
    </LineItem>
  </Order>
</Root>

我尝试使用以下方法返回 XML 中的查询:

FOR XML PATH ('Order'), root ('Root')

但这为我提供了每行一个 Order 节点(总共 6 个),而不是每个 orderId 一个订单节点(总共 2 个)。

有什么想法吗?

最佳答案

select  
    OrderID,
    CustomerID,
    (
        select 
        ItemID,
        ItemName
        from @Orders rsLineItem
        where rsLineItem.OrderID = rsOrders.OrderID
        for xml path('LineItem'), type
    )
from (select distinct OrderID, CustomerID from @Orders) rsOrders
FOR XML PATH ('Order'), root ('Root')

关于sql-server - SQL Server : FOR XML PATH - nesting/grouping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658942/

相关文章:

sql - 删除表和截断表之间的区别?

sql-server - Microsoft SQL Server Express 是否可用于 Linux 中的生产?

SQL在内部连接中间使用嵌套选择

objective-c - 解析位于 rss2 提要项的 <description></description> 内的 <img> 标签

sql-server - FOR XML SQL Server - 输出 XML 中的变量元素名称

sql-server - SQL限制连接/串联结果

sql - 基于列值的算术/逻辑运算

mysql - 如何获取一行中的某一数据

java - 使用 Java 从 xml 文件中提取值

sql-server - 对于 XML 路径 ('' ) : Escaping "special" characters