博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 2005/2008使用PIVOT/UNPIVOT行列转换
阅读量:7071 次
发布时间:2019-06-28

本文共 1907 字,大约阅读时间需要 6 分钟。

SQL Server 005/2008使用/行列转换

SQL Server2005引入了很多迎合开发者口味的新特性,虽然改动不大,却大大了减少了开发者的工作量,这种替用户考虑的开发思路,值得称赞。

在SQL Server2000中,要实现行列转换,需要综合利用聚合函数和动态SQL,实现起来需要一定的技巧,所以在CSDN的SQL讨论区里可以看到大量询问 行列转换如何实现的问题。到了2005中,使用新引进的关键字/,可以轻松实现行列转换的需求。

好像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)

转载于:https://www.cnblogs.com/longle/archive/2012/05/05/2484596.html

你可能感兴趣的文章
asp.net的session mode的inproc改为StateServer,网站不可以访问
查看>>
【SAS NOTE】where & time
查看>>
图片旋转和翻转
查看>>
定位和可见性
查看>>
c语言中的qsort方法的使用
查看>>
Android notification详解
查看>>
程序线程paip.程序不报错自动退出的解决
查看>>
(转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
查看>>
在Intellij IDEA 12中Tomcat无法调试
查看>>
ExtJs十四(ExtJs Mvc图片管理之四)
查看>>
nullnullHandling Features Not Supported on TV 在电视上处理不支持的功能
查看>>
数据库并发操作
查看>>
PostgreSQL在何处处理 sql查询之十一
查看>>
正能量之项目经理的自我修养
查看>>
[置顶] Android下实现自动关机的方法总结
查看>>
POJ 2533 Longest Ordered Subsequence
查看>>
【IUML】回归和梯度下降
查看>>
黑马程序员:Java基础总结----网络编程
查看>>
线程和进程区别
查看>>
perf 简介
查看>>