使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求。
在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法。
PIVOT是行转列,用法如下:
假如表结构如下:
id name quarter profile
1 a 1 1000
1 a 2 2000
1 a 3 4000
1 a 4 5000
2 b 1 3000
2 b 2 3500
2 b 3 4200
2 b 4 5500
----------------------------------------------
使用PIVOT将四个季度的利润转换成横向显示:
select id,name,
[1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度"
from test
pivot
(
sum(profile)
for quarter in ([1],[2],[3],[4])
)
as pvt
-----------------------------------------------
得出的结果如下:
id name 一季度 二季度 三季度 四季度
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500
========================================================================================
UNPIVOT是列转行,用法如下:
假如表结构如下:
id name Q1 Q2 Q3 Q4
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500
-----------------------------------------------
使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
select id,name,quarter,profile
from test
unpivot
(
profile
for quarter in ([Q1],[Q2],[Q3],[Q4])
)
as unpvt
-----------------------------------------------
得出的结果如下:
id name quarter profile
1 a Q1 1000
1 a Q2 2000
1 a Q3 4000
1 a Q4 5000
2 b Q1 3000
2 b Q2 3500
2 b Q3 4200
2 b Q4 5500