2012-09-20 83 views
0

我有具有以下结构 的OrderItemsT-SQL的XML路径

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> 

目前,我停留在

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

回答

2

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') 

表给出了这样的输出

<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> 

我认为这是你以后的样子。

SQL Fiddle