2010-08-05 83 views
3

列我有2个表SQL查询转换行

顺序表 - OrderId-主键
Order Details表 - 订单ID从订单表的外键。

的OrderDetail表有其是在特定的顺序

For example 

Order            Order Detail Table 
ID CustomerID OrderDate   ID OrderID  ProductID  UnitPrice Quantity 
1  1  2009-10-1    1 1    5     5  10 
2  2  2009-10-2    2 1    4     10  100    
3  3  2009-10-3    3 1    7     8  50     
             4 1    2     5  20 
             5 2    1     8  100 
             6 2    5     5  1            
             7 2    4     10  100 
             8 3    1     5  200 
             9 3    3     20  100 
             10 3    2     5  200 



I need to get result like this  
OrderId ProductID       Total Items   
1   5,4,7,2        180 (sum of quantity) 
2   1,5,4        300 
3   1,3,2        500 

我们如何在一个查询中得到这样的结果订购的所有产品的信息?

+0

你想要来连接的产品ID的? – Icode4food 2010-08-05 17:12:23

+0

是的,我只需要为每个订单号获取产品ID – Pinu 2010-08-05 17:13:45

+0

什么版本的SQL Server? – 2010-08-05 17:14:47

回答

2

对于SQL Server 2005+,使用方法:

SELECT x.orderid, 
     STUFF(ISNULL((SELECT ', ' + y.productid   
         FROM ORDER_DETAILS y 
         WHERE y.orderid = x.orderid 
        GROUP BY y.productid 
        FOR XML PATH ('')), ''), 1, 2, ''), 
     x.total_items 
    FROM (SELECT od.orderid, 
       SUM(od.quantity) AS total_items 
      FROM ORDER_DETAILS od 
     GROUP BY od.orderid) x 
0
Select 
    odt.OrderID 
    , (Select Cast(ProductID as Varchar(20) + ', ' 
     from [Order Detail Table] as odt1 
     where odt.OrderID = odt1.OrderID 
     FOR XML PATH('') 
    )          as ProductID 
    , Sum(odt.UnitPrice * odt.Quantity)  as [Total Items] 
From [Order Detail Table] as odt 
Group By OrderID