我有数据看起来像:
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')