SQL-запрос преобразования строк в столбцы - PullRequest
3 голосов
/ 05 августа 2010

у меня 2 таблицы

Таблица заказов - OrderId - первичный ключ
Таблица сведений о заказе - внешний ключ OrderID из таблицы заказов.

Таблица 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 ]

2 голосов
/ 05 августа 2010

Для 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 голосов
/ 05 августа 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...