如何使用具有多个条件的SQL Server Pivot

时间:2014-07-23 21:11:02

标签: sql sql-server sql-server-2012

我有一个如下表所示,我想将行转换为列,但我希望每个月都有列_product。

我知道我可以为每种产品类型和月份使用SUM(CASE),如:

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

但是我想使用pivot(我听说它效率更高)。我一直在寻找如何使用数据透视表,但我似乎唯一能找到的就是如何简单地将行移动到列,而不是将行组合成列。

有人可以告诉我这是否可行,或者我必须坚持使用方法时的好旧案例。

感谢,

从:

------------------------------------------------
|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
------------------------------------------------

2 个答案:

答案 0 :(得分:0)

分别按月旋转每个产品,然后将生成的(数据透视表)连接在一起,并根据需要对列重新排序。

答案 1 :(得分: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