加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql强大的行转列功能(内置函数pivot及注意事项)

发布时间:2022-11-16 19:31:04 所属栏目:MsSql教程 来源:未知
导读: 语法:
PIVOT用于将列值旋转为列名(即行转列),在SQL Server2000可以用聚合函数配合CASE语句实现
PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
完整语法:
table_source
P

语法:

PIVOT用于将列值旋转为列名(即行转列),在SQL Server2000可以用聚合函数配合CASE语句实现

PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P

完整语法:

table_source

PIVOT(

聚合函数(value_column)

FOR pivot_column

IN()

)

UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现

完整语法:

table_source

UNPIVOT(

value_column

FOR pivot_column

IN()

)

注意: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

Mssq数学函数_普通高中课程标准实验教科书数学函数必修1函数_2007-2012广东高考理科数学导数函数

方法一:

现在的问题是:我想根据姓名统计这个人的三门成绩,即:姓名 语文 数学 物理

首先看看使用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 姓名

2007-2012广东高考理科数学导数函数_Mssq数学函数_普通高中课程标准实验教科书数学函数必修1函数

方法二:使用pivot函数

select * from tb pivot(max(分数) for 课程 in (语文,数学,物理)) a

2007-2012广东高考理科数学导数函数_普通高中课程标准实验教科书数学函数必修1函数_Mssq数学函数

上面查询前提是:

PIVOT、UNPIVOT是SQL Server 2005的语法,使用需修改数据库兼容级别在数据库属性->选项->兼容级别改为 90

如果兼容级别不改为 90Mssq数学函数,查询结果如下:

普通高中课程标准实验教科书数学函数必修1函数_2007-2012广东高考理科数学导数函数_Mssq数学函数

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!