首页 > 代码库 > pivot 与 unpivot函数

pivot 与 unpivot函数

http://d4.sina.com.cn/pfpghc/8ee220eb76e34d58971acf52861660a8.jpg
http://d9.sina.com.cn/pfpghc/bc7e585930be40b0b19c80c7cef8762b.jpg
 
 
 
 
 
 
 

pivot 与 unpivot函数pivot 与 unpivot 函数是SQL05新提供的2个函数 灰常灰常的实用

------------------------------------------------------------------------------

pivot函数:

create table test(id int,name varchar(20),quarter int,profile int)
insert into test values(1,‘a‘,1,1000)
insert into test values(1,‘a‘,2,2000)
insert into test values(1,‘a‘,3,4000)
insert into test values(1,‘a‘,4,5000)
insert into test values(2,‘b‘,1,3000)
insert into test values(2,‘b‘,2,3500)
insert into test values(2,‘b‘,3,4200)
insert into test values(2,‘b‘,4,5500)

 

select * from test    --创建表test

 

pivot <wbr>与 <wbr>unpivot函数

 

现在需要把quarter 从1列数据变成4列数据  效果如:

 

pivot <wbr>与 <wbr>unpivot函数

 

把一列拆成几列这时候就能使用pivot函数很简单的实现

 

select * from test
pivot
(
 sum([profile]) for [quarter]
 in
 ([1],[2],[3],[4])
)
as
s

注:使用pivot把一列拆成几列时 需要后面as取个别名 这是固定的格式 同时如 for前是必须使用聚合函数的

当然不使用pivot函数也可以得到相同效果 只是代码长切效率低 但容易理解

select id,[name],
‘1‘=(select sum([profile]) from test where id=a.id and quarter=1),
‘2‘=(select sum([profile]) from test where id=a.id and quarter=2),
‘3‘=(select sum([profile]) from test where id=a.id and quarter=3),
‘4‘=(select sum([profile]) from test where id=a.id and quarter=4)
from test as a
group by id,name

 

-----------------------------------------------------------------------------------------

unpivot函数 顾名思义 他就是把几列合并到1列中去

create table test1(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)

insert into test1 values(1,‘a‘,1000,2000,4000,5000)
insert into test1 values(2,‘b‘,3000,3500,4200,5500)

 

select * from test1 --创建test1表

pivot <wbr>与 <wbr>unpivot函数

我们要把Q1 Q2 Q3 Q4合到1列 季度列中去 如效果:

 

pivot <wbr>与 <wbr>unpivot函数

 

使用unpivot可以很简单的实现

select id ,[name],[jidu],[xiaoshou] from test1
unpivot
(
 xiaoshou for jidu in
 ([q1],[q2],[q3],[q4])
)
as f

注:同样需要使用as取别名同样是固定的格式 unpivot函数中没有聚合函数 xiaoshou和jidu列都是原来没有的 jidu表由原来的Q1 Q2 Q3 Q4组成 

 

同样的不使用unpivot也可以实现以上的功能

select id,[name],
jidu=‘Q1‘,
xiaoshou=(select Q1 from test1 where id=a.id)
from test1 as a
union
select id,[name],
jidu=‘Q2‘,
xiaoshou=(select Q2 from test1 where id=a.id)
from test1 as a
union
select id,[name],
jidu=‘Q3‘,
xiaoshou=(select Q3 from test1 where id=a.id)
from test1 as a
union
select id,[name],
jidu=‘Q4‘,
xiaoshou=(select Q4 from test1 where id=a.id)
from test1 as a 

转自:http://blog.sina.com.cn/s/blog_5ef755720100cyo3.html

 
 
 
  • 含“”的博文
  • 含“”的博主
  • 含“”的音乐
  • 含“”的视频

 
最近喜欢了的博主:
加载中…
  • Qing
  • 博客
  • 转载原文
  • 采编
  • 长微博
神回复
神回复,只要1积分就可以了哦
  • 贱人就是矫情
  • 人艰不拆
  • 朕知道了
  • 不明觉厉
  • 这真是极好的
  • 也真是醉了
  • 点个赞
  • 你那么萌你家人造吗
  • 涨姿势

发表取消
发表成功
 

 
为了您的账号安全,请绑定邮箱
 

分享到新浪Qing
分享到新浪微博


 

 

 

 
幻灯播放
分享到X
 
 
 
腾讯微博
 
一键通
 
新浪微博
QQ空间
搜狐微博
新华微博
手机
网易微博
开心网
豆瓣网
手机快传
人人网
天涯
凤凰微博
朋友网
微信
QQ好友
 
更多平台... (133)
bShare

pivot 与 unpivot函数