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,将同一行中四个季度的列数据转换成四行数据:

 

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

(
8 row(s) affected)


posted @ 2011-03-11 22:46  Devil_Zhang  阅读(1129)  评论(0编辑  收藏  举报