sql-server – SQL Server:FOR XML PATH – 嵌套/分组

前端之家收集整理的这篇文章主要介绍了sql-server – 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')

猜你在找的MsSQL相关文章