PIVOT函数与UNPIVOT函数的运用
PIVOT用于将行转为列,完整语法如下:
TABLE_SOURCE
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)
UNPIVOT用于将列转为行,完整语法如下:
完整语法:
TABLE_SOURCE
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
以上语法可以理解为value_column字段与pivot_column字段的行列(列行)转换,pivot_column字段显示的列/行为column_list
--建张表Table_A
create table Table_A(name varchar(8),Math int,English int,Chinese int)
insert into Table_A values('小A',80,90,88)
insert into Table_A values('小B',70,90,85)
insert into Table_A values('小C',75,95,85)
insert into Table_A values('小D',80,90,75)
--原始表数据
select * from Table_A
name | Math | English | Chinese |
小A | 80 | 90 | 88 |
小B | 70 | 90 | 85 |
小C | 75 | 95 | 85 |
小D | 80 | 90 | 75 |
--UNPIVOT用于将列转为行
select Subject,name,Grade from Table_A
unpivot(Grade for Subject in ([Math],[English],[Chinese])) as s
Subject | name | Grade |
Math | 小A | 80 |
English | 小A | 90 |
Chinese | 小A | 88 |
Math | 小B | 70 |
English | 小B | 90 |
Chinese | 小B | 85 |
Math | 小C | 75 |
English | 小C | 95 |
Chinese | 小C | 85 |
Math | 小D | 80 |
English | 小D | 90 |
Chinese | 小D | 75 |
--PIVOT函数用于将行转为列
select * from
(
select Subject,name,Grade from Table_A
unpivot(Grade for Subject in ([Math],[English],[Chinese])) as s
) as a
pivot(sum(Grade) for name in ([小A],[小B],[小C],[小D])) as b
Subject | 小A | 小B | 小C | 小D |
Chinese | 88 | 85 | 85 | 75 |
English | 90 | 90 | 95 | 90 |
Math | 80 | 70 | 75 | 80 |
实现多行多列转换,请参考:http://www.cnblogs.com/hbwy/p/4359209.html
最新文章
- Json对象与Json字符串互转(4种转换方式)
- linux网络配置命令
- c# 高效读写文件
- ubuntu使用
- 分析实现Android自定义View之扇形图
- ,2,liunx命令格式
- HDU 2717 Catch That Cow --- BFS
- Hibernate 报错org.hibernate.PropertyAccessException: IllegalArgumentException(已解决)
- CentOS rc.local 不执行的问题
- Sicily 4495. Print permutations
- linux杂记(八)linux压缩与打包
- read cache return null
- wcf发布的服务在前端调用时,遇到跨域问题的解决方案
- 购物篮算法的理解-基于R的应用
- Node: 如何控制子进程的输出
- The declared package does not match the expected package Java
- python的pyspider框架下爬虫
- 让NotePad++添加到右键快捷方式
- PHP字符串位置相关的函数
- hightcharts 如何修改legend图例的样式