SQL SERVER 2005 中 PIVOT 和 UNPIVOT 的用法
PIVOT的中文意思是“在枢轴上转动”,比如对于一个2维坐标,将横坐标变成纵坐标,将纵坐标变成横坐标。反映在一个Relational Table上的意思就是:变行为列,变列为行。
表一:
表二:
将表一转换成表二:
SELECT * FROM StudentScore
PIVOT
(
SUM(Score) FOR Subject IN ([语文],[数学],[化学],[物理])
)
AS
B
SUM(Score) 是我们需要统计的数据,FOR Subject IN ([语文],[数学],[化学],[物理]是统计的范围)就成了我们最终输出的结构了。
以上部分转自:http://blog.vsharing.com/janezhangxy/A1273548.html
UNPIVOT
建立测试表,插入测试数据
create table test(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)
insert into test values(1,'a',1000,2000,4000,5000)
insert into test values(2,'b',3000,3500,4200,5500)
select * from test
id name Q1 Q2 Q3 Q4
----------- --------------------
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500
(2 row(s) affected)
利用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
selectid,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
(8 row(s) affected)