SQL 2005
我有临时表:
Year PercentMale PercentFemale PercentHmlss PercentEmployed TotalSrvd
2008 100 0 0 100 1
2009 55 40 0 80 20
2010 64 35 0 67 162
2011 69 27 0 34 285
2012 56 43 10 1 58
我想创建一个查询来显示如下数据:
2008 2009 2010 2011 2012
PercentMale 100 55 64 69 56
PercentFemale - 40 35 27 43
PercentHmlss - - - - 10
PercentEmployed 100 80 67 34 1
TotalSrvd 1 20 162 285 58
我可以使用数据透视表来完成此操作吗?如果是这样,怎么样?我尝试使用枢轴,但没有找到成功。
select PercentHmlss,PercentMale,Percentfemale,
PercentEmployed,[2008],[2009],[2010],[2011],[2012] from
(select PercentHmlss,PercentMale, Percentfemale, PercentEmployed,
TotalSrvd,year from @TempTable)as T
pivot (sum (TotalSrvd) for year
in ([2008],[2009],[2010],[2011],[2012])) as pvt
结果如下:
PercentHmlss PercentMale Percentfemale PercentEmployed [2008] [2009] [2010] [2011] [2012]
0 55 40 80 NULL 20 NULL NULL NULL
0 64 35 67 NULL NULL 162 NULL NULL
0 69 27 34 NULL NULL NULL 285 NULL
0 100 0 100 1 NULL NULL NULL NULL
10 56 43 1 NULL NULL NULL NULL 58
感谢。
答案 0 :(得分:3)
SELECT *
from
(
select year, quantity, type
from
(
select year, percentmale, percentfemale, percenthmlss, percentemployed, totalsrvd
from t
) x
UNPIVOT
(
quantity for type
in
([percentmale]
, [percentfemale]
, [percenthmlss]
, [percentemployed]
, [totalsrvd])
) u
) x1
pivot
(
sum(quantity)
for Year in ([2008], [2009], [2010], [2011], [2012])
) p
编辑进一步说明:
您接近于您尝试过的PIVOT查询,因为您获得了所需列格式的Year
数据。但是,由于您希望数据行中最初列percentmale
,percentfemale
等中包含的数据 - 您需要首先取消数据的转换。
基本上,您正在做的是获取原始数据并根据年份将其全部放入行中。 UNPIVOT将以格式(Demo):
放置您的数据Year Quantity Type
2008 100 percentmale
2008 0 percentfemale
etc
将数据转换为此格式后,即可执行PIVOT以获得所需的结果。