PIVOT/UNPIVOT行列转换
来源:互联网 发布:淘宝买家聊天工具 编辑:程序博客网 时间:2024/04/29 03:56
SQL Server 2005之PIVOT/UNPIVOT行列转换
在SQL Server2000中,要实现行列转换,需要综合利用聚合函数和动态SQL,实现起来需要一定的技巧,所以在CSDN的SQL讨论区里可以看到大量询问行列转换如何实现的问题。到了2005中,使用新引进的关键字PIVOT/UNPIVOT,可以轻松实现行列转换的需求。
好像Oracle11g也准备引入PIVOT/UNPIVOT特性,对于Oracle开发来说,It's a good news。
本文通过两个简单的例子展示PIVOT/UNPIVOT的用法。详细的语法请参考联机帮助。
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
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
(8 row(s) affected)
利用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
(2 row(s) affected)
UNPIVOT
建立测试表,插入测试数据
drop table test
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)
- PIVOT/UNPIVOT行列转换
- Pivot UnPivot 行列转换
- Pivot UnPivot 行列转换
- SQl2005行列转换 pivot/unpivot
- SQLServer行列转换 Pivot UnPivot
- SQLServer行列转换 Pivot UnPivot
- SQL行列转换PIVOT、UNPIVOT
- [MSSQL]行列转换 Pivot UnPivot
- SQLServer行列转换 Pivot UnPivot
- SQLServer行列转换 Pivot UnPivot
- SQLServer行列转换 Pivot UnPivot
- MSSQL2005行列转换(使用PIVOT and UNPIVOT)
- PIVOT/UNPIVOT的用法(行列转换)
- SQL Server 行列转换 Pivot UnPivot
- sql server 行列转换PIVOT 和 UNPIVOT
- SQL通过PIVOT/UNPIVOT实现行列转换
- SQLServer行列转换 Pivot UnPivot 动态实现
- 表横竖转换(行列转换)PIVOT 和 UNPIVOT 用法
- 我们还没有资格享受奢侈--写给正在上学的玩家
- 线程之间传递数据对象(利用线程槽实现)
- Unix系统环境变量和Shell变量
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(61): KBUILD_MODNAME
- php八荣八耻
- PIVOT/UNPIVOT行列转换
- 扩展Zend_Controller_Action需注意
- zend framework单元测试
- eclipse使用总结
- C#实现带指定文本水印的截图(指定窗口与 全屏)
- HTML的xmlns 属性
- 工薪族创业
- 数据库设计方法学总结
- Zend_Controller 插件编写