SQL SERVER 2005 中 PIVOT 和 UNPIVOT 的用法

PIVOT的中文意思是“在枢轴上转动”,比如对于一个2维坐标,将横坐标变成纵坐标,将纵坐标变成横坐标。反映在一个Relational Table上的意思就是:变行为列,变列为行。

表一:

SQL SERVER 2005 中 PIVOT 和 UNPIVOT 的用法

表二:

将表一转换成表二:
  
    
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)


你可能感兴趣的:(sql server 2005)