Как выразить этот запрос в SQL Server 2008 - PullRequest
1 голос
/ 03 ноября 2011

У меня есть таблица под названием Отчетность со следующими столбцами

OutletId CampaignId    ItemId  Qty  
10          1          Item1   12    
10          1          Item2   13    
10          1          Item3   14    
20          2          Item4   10    
20          2          Item5   11    
20          2          Item6   12    
20          2          Item7   8    

Теперь я хочу получить данные в этом формате, когда пользователь выбирает campaignId = 1

OutletId   CampaignId  Item1  Item2   Item3  
10            1         12     13       14  

, когда пользователь выбирает CampaignId =2

OutletId   CampaignId Item4 Item5 Item6 Item7   
20            2         10    11   12    8

Здесь элементы для кампании не являются фиксированными

Ответы [ 2 ]

4 голосов
/ 03 ноября 2011

Я думаю, что это эффективно таким образом:

SELECT *
FROM
(
    SELECT OutletId, CampaignId, ItemId, Qty
FROM Reporting) AS p
PIVOT
(
    SUM(Qty)
    FOR ItemId IN (SELECT ItemId FROM Reporting WHERE campaignId =1) 
) as pvt

Comment: Here campaignId =1 or campaignId =2 or campaignId =... whatever u want

0 голосов
/ 03 ноября 2011

Возможное решение будет:

SELECT *
FROM
(
SELECT OutletId, CampaignId,ItemId, Qty
FROM test) AS p
PIVOT
(
    SUM(Qty)
    FOR ItemId IN (Item1,Item2,Item3,Item4)
) as pvt

Но очевидно, что, как уже говорилось ранее, это не очень эффективно, потому что вы не всегда знаете Предметы ... вы либо переделываете свою таблицу, либо, используя PIVOT, вы можете предварительно построить динамические элементы построения SQL-объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...