代码之家  ›  专栏  ›  技术社区  ›  Pinu

将行转换为列的SQL查询

  •  3
  • Pinu  · 技术社区  · 14 年前

    我有2张桌子。

    订单表-订单ID-主键
    订单详细信息表-订单表中的订单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
    

    我们如何在一个查询中获得这个结果?

    2 回复  |  直到 14 年前
        1
  •  2
  •   OMG Ponies    14 年前

    对于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
    
        2
  •  0
  •   JeffO    14 年前
    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