2011-11-03 31 views
1

我有表調用下面的列如何表達在SQL Server此查詢2008

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 

這裏的活動項目是不固定

+1

你應該重新思考設計,因爲這將是不可能的(列的動態計),是非常低效的... – Yahia

+0

@Yahia:旋轉並非完全不可能,但你是對的。也許重新考慮設計是一個更好的選擇 –

+0

@LukasEder你是對的樞軸是一個選項...雖然不是很有效... – Yahia

回答

4

我覺得是這樣高效:

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

一個可能的解決辦法是:

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 building pivot項目。