我有一个如下表所示,我想将行转换为列,但我希望每个月都有列_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
------------------------------------------------
答案 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