用于转置的 Unpivot 枢轴
Posted
技术标签:
【中文标题】用于转置的 Unpivot 枢轴【英文标题】:Unpivot pivot for transpose 【发布时间】:2014-02-27 06:12:35 【问题描述】:我有一个Accounts
表格,格式为[account name]
、Q1
、Q2
....QN
,其中包含每个帐户的收入详细信息。需要转置为[Quarter ]
[account1]
[account2]
。
我的查询如下。
Select [Quarters], [account 1], [ account2]
from
(
Select *
from Accounts
unpivot
( Value for [Quarters] in (Q1,Q2,Q3,Q4,.....)
) unpiv
) as src
Pivot
(
sum(value) for [Account name] in ([account1],[account2])
) piv
但是这个查询返回的是 NULL。
帐户表
[Account name] [Q1] [Q2] [Q3]
Apple 20 30 40
Google 30 10 15
IBM 34 23 12
想要的输出
[Quarters] [Apple][Google][IBM]
Q1 20 30 34
Q2 30 10 23
Q3 40 15 12
【问题讨论】:
【参考方案1】:您可以同时使用 UNPIVOT 和 PIVOT 函数来返回结果。我不确定您为什么要返回空值,可能是您在子查询中包含了太多列。要获得结果,您应该能够使用:
select quarters, Apple, Google, IBM
from
(
select accountname, quarters, value
from accounts
unpivot
(
value
for quarters in (Q1, Q2, Q3)
) u
) d
pivot
(
sum(value)
for accountname in (Apple, Google, IBM)
) p;
见SQL Fiddle with Demo
【讨论】:
以上是关于用于转置的 Unpivot 枢轴的主要内容,如果未能解决你的问题,请参考以下文章