2012-09-17 72 views
2

我想將一個錶轉換成一個更容易用Excel操作的視圖。我在Sql Server中創建了可以被會計部門讀取的視圖,以便在Excel中創建統計信息和其他交叉表數據透視表。在一行中組合多行數據

當前格式

 
OccupationId | ProductId | IsGroup | IsAdditionalNight | Price 
-------------+-----------+---------+-------------------+------ 
1   | 47  | 0  | 0     | 50 
2   | 47  | 0  | 1     | 45 
3   | 47  | 1  | 0     | 30 
4   | 47  | 1  | 1     | 28 

,我要揭露

 
ProductId | Price | AdditionalNight | GroupPrice | GroupAdditionalNight 
----------+-------+-----------------+------------+--------------------- 
47  | 50 | 45    | 30   | 28 

我怎樣才能做到這一點在SQL Server 2008 R2視圖格式的表格?我需要查詢快速,因爲它將成爲更大查詢的一部分(使用CTE)。

目前我唯一想到的方法是包含4個子查詢以單獨獲得所有4個價格,但我不喜歡這種方法,它掃描了4次表格。

回答

3
SELECT ProductId, 
MAX(CASE 
WHEN IsGroup=0 AND IsAdditionalNight =0 then Price 
END) as [Price], 
MAX(CASE 
WHEN IsGroup=0 AND IsAdditionalNight =1 then Price 
END) as [AdditionalNight], 
MAX(CASE 
WHEN IsGroup=1 AND IsAdditionalNight =0 then Price 
END) as [GroupPrice], 
MAX(CASE 
WHEN IsGroup=1 AND IsAdditionalNight =1 then Price 
END) as [GroupAdditionalNight] 

FROM table1  
GROUP BY ProductId 

或者你也可以做同樣的使用PIVOT(我個人發現了比上述辦法PIVOT更復雜的語法,但沒有性能上的差異,有的人喜歡PIVOT)。

+0

比做'PIVOT'更乾淨 – Taryn

+0

就這麼簡單?戴恩,我正在有效地嘗試學習PIVOT方法。有時你忘記了簡單的方法。謝謝。 –