简体   繁体   English

用于xml路径的T-sql

[英]T-sql for xml path

I have a table which has the following structure OrderItems 我有一个表具有以下结构OrderItems

    OrderId  ProductName  UnitPrice
      1      Harley         1.0
      1      Gloves         0.25
      2      Gloves         0.25


 By doing a select I would like to obtain something similar with :
<Order>
<OrderItem>
<OrderId>1</OrderId><ProductName>Harley</ProductName><UnitPrice>1.0</UnitPrice>
</OrderItem>
<OrderItem>
<OrderId>1</OrderId><ProductName>Gloves</ProductName><UnitPrice>0.25</UnitPrice>
</OrderItem>
</Order>

and 
<Order>
<OrderItem>
<OrderId>2</OrderId><ProductName>Gloves</ProductName><UnitPrice>0.25</UnitPrice>
</OrderItem>
</Order>

Currently I am stuck at 目前我被困在了

SELECT 
  t2.OrderId, t2.ProductName, t2.UnitPrice  
       FROM OrderItems t2,OrderItems t1 where t2.OrderId = t1.OrderId
        FOR XML PATH('OrderItem') , ROOT('Order')

This 这个

DECLARE @OrderItems TABLE (OrderID INT, ProductName VARCHAR(50), UnitPrice MONEY)
INSERT @OrderItems VALUES (1, 'Harley', 1.0), (1, 'Gloves', 0.25), (2, 'Gloves', 0.25)

SELECT  (   SELECT  OrderID, ProductName, UnitPrice
            FROM    @OrderItems t2
            WHERE   t2.OrderID = t1.OrderID
            FOR XML PATH('OrderItem'), TYPE
        ) 
FROM    (SELECT DISTINCT OrderID FROM @OrderItems) t1 
FOR XML PATH('Order') , ROOT('Orders')

Gives this output 给出这个输出

<Orders>
  <Order>
    <OrderItem>
      <OrderID>1</OrderID>
      <ProductName>Harley</ProductName>
      <UnitPrice>1.0000</UnitPrice>
    </OrderItem>
    <OrderItem>
      <OrderID>1</OrderID>
      <ProductName>Gloves</ProductName>
      <UnitPrice>0.2500</UnitPrice>
    </OrderItem>
  </Order>
  <Order>
    <OrderItem>
      <OrderID>2</OrderID>
      <ProductName>Gloves</ProductName>
      <UnitPrice>0.2500</UnitPrice>
    </OrderItem>
  </Order>
</Orders>

I think this is what you are after. 我想这就是你所追求的。

SQL Fiddle SQL小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM