加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:47:32 所属栏目:MsSql教程 来源:网络整理
导读:我有数据看起来像: OrderID CustomerID ItemID ItemName10000 1234 222221 Product A10000 1234 222222 Product B10000 1234 333333 Product C20000 5678 222221 Product A20000 5678 222222 Product B20000 5678 333333 Product C 我想在SQL Server中编写一
我有数据看起来像:
OrderID CustomerID  ItemID  ItemName
10000   1234        222221  Product A
10000   1234        222222  Product B
10000   1234        333333  Product C
20000   5678        222221  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>22222</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>22222</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')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读