SQL Server行转列
来源:互联网 发布:电脑软件操作系统 编辑:程序博客网 时间:2024/06/07 18:18
语法:
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)
UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现
完整语法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别
在数据库属性->选项->兼容级别改为 90
-----------------------------------------------------------------------------------------华丽的分隔符-------------------------------------------------------------------------------------------------
最简单的案例:一句话转换
建表:
if object_id('tb')is not null drop table tb
Go
create table tb(姓名 varchar(10),课程 varchar(10),分数 int)
insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)
go
select * from tb
--------------------------------结果------------------------------------------------------------------------------------
姓名 课程 分数
---------- ---------- -----------
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
(6 行受影响)
现在的问题是:我想根据姓名统计这个人的三门成绩,即:姓名 语文 数学 物理
首先看看使用case when end结构的时候:
select 姓名,
max(case 课程 when '语文' then 分数 else 0 end)语文,
max(case 课程 when '数学'then 分数 else 0 end)数学,
max(case 课程 when '物理'then 分数 else 0 end)物理
from tb
group by 姓名
--------------------------------结果------------------------------------------------------------------------------------
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
(2 行受影响)
这个结果就是我们想要的,然后再看看使用pivot:
select * from tb pivot(max(分数) for 课程 in (语文,数学,物理))a
- sql server行转列
- sql server 行转列
- Sql Server行转列
- sql server行转列问题
- SQL Server 横转纵 行转列
- SQL Server 行转列
- SQL SERVER 行转列例子
- sql server 行转列
- sql server 行转列
- ms server sql 行转列
- SQL Server行转列
- sql server:sql动态行转列(pivot) 例子
- Sql server行转列处理Sample
- Sql server行转列处理Sample
- Sql server行转列处理Sample
- sql server行转列 Pivot UnPivot
- SQL SERVER行转列存储过程
- sql server行转列问题总结
- 5个套路看懂小程序开发
- 一步步手动构建小于10M的类嵌入式Linux系统
- Android中应用程序获得系统签名权限(platform.x509.pem platform.pk8)下载地址
- 设计模式-命令模式(二)
- Android第三方SDK使用分析
- SQL Server行转列
- 关于Collections
- ubuntu下安装python-requests包
- Linux Namespaces
- 遗传算法及模拟退火算法
- (面试题)Java中的内存泄露
- 为什么会有session 和 cookie ,以及两者的区别
- 后台项目中用javaScript实现显示动态时间。。。
- 动画约束之层动画(一)