2014-07-23 71 views
0

我有一張如下所示的表格,我希望將行轉置爲列,但我希望每個month_product都有列。如何在多個條件下使用SQL Server Pivot

我知道我可以使用SUM(CASE)每個產品類型和一個月,如:

SUM(CASE WHEN Month='July' AND Product='Prod1'THEN Revenue END) 

不過,我想用樞軸(聽說它的效率更高)。我一直在尋找如何使用樞軸,但我似乎能夠找到的唯一的方法是如何簡單地將行移動到列,而不是將行組合到列。

有人可以讓我知道這是否可能,或者我必須堅持好的舊案例時的方法。

感謝,

從:

------------------------------------------------ 
|Month| Account| Product| Revenue| 
------------------------------------------------ 
| July| Acct1 | Prod1 |1000 
------------------------------------------------ 
| July| Acct1 | Prod2 |1000 
------------------------------------------------ 
| Aug| Acct2 | Prod2 |1000 
------------------------------------------------ 

到:

------------------------------------------------ 
|Account | July_Prod1| July_Prod2| Aug_Prod2 
------------------------------------------------ 
| Acct1 |  1000 | 1000 | 
------------------------------------------------ 
| Acct2 |  -  | -  | 1000 
------------------------------------------------ 
+4

'pivot'不是更有效。語法糖。 –

+0

噢,如果效率不高,那麼做的時候就容易多了,謝謝! – user2669043

回答

0

樞軸每個產品按月份分別,然後加入所得到的(透視表)在一起,並重新排序的列滿足您的需求。

0

級聯的字段和樞轉之後該:

WITH A as (
    select *, Month + '_' + Product WorkedField 
    from Table1 A 
) 

SELECT MONTH, ACCOUNT, sum(July_Prod1) July_Prod1, sum(July_Prod2) July_Prod2, sum(Aug_Prod2) Aug_Prod2 
FROM A  
pivot (sum(Revenue) for WorkedField in (July_Prod1, July_Prod2, Aug_Prod2)) B 
GROUP BY MONTH, ACCOUNT 

SQL Fiddle