sql内置函数pivot强大的行转列功能

转载 2015年11月18日 11:59:13

语法:

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

--------------------------------结果------------------------------------------------------------------------------------

姓名         语文          数学          物理
---------- ----------- ----------- -----------
李四         74          84          94
张三         74          83          93

(2 行受影响)




Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行

Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
  • Seandba
  • Seandba
  • 2017年05月25日 16:18
  • 3361

oracle-行转列点评oracle11g sql新功能pivot/unpivot

http://hi.baidu.com/yyfangzong/item/01e5bbe8323d180965db00ed 摘要:(简要介绍Oracle11g SQL的新功能 pivot/unpi...

行转列:SQL SERVER PIVOT与用法解释

我在网上看到了 pivot的用法,我于是复制下了,以便我下次查资料,自己也可以相当于回顾一下 列子SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]--这...

行转列:SQL SERVER PIVOT与用法解释

【转】原文地址:http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.html 行转列:SQL SERVER PIVOT与用法解释...

sql server 行转列 Pivot UnPivot

PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )...

sql server行转列 Pivot UnPivot

SQL Server中行列转换 Pivot UnPivot  好东西啊。。。 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实...
  • kayv
  • kayv
  • 2011年10月13日 13:25
  • 386

行转列:SQL SERVER PIVOT与用法解释

在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL) 我们先...

SQL行转列问题总结(pivot的使用)

1、行转列   ---1、最简单的行转列 /*     问题:假设有张学生成绩表(tb)如下: 姓名课程分数 张三语文74 张三数学83 张三物理93 李四语文74 李四数学84 李四物理94   ...

sql行转列-pivot

写完后写在最前面的话:本来以为能够自己来原创一篇,但是再重新读了一下原作的博文,决定还是转载人家的吧。自己没有那个水平。。出处:原文链接 PIVOT是SQL Server2005新添加的一个表运算符,...

SQL行转列PIVOT关键字的用法

解释:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sql内置函数pivot强大的行转列功能
举报原因:
原因补充:

(最多只允许输入30个字)