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

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

语法:

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 行受影响)

哇,结果一模一样!这个就是我想用的结果。

时间: 2024-10-18 11:36:33

sql内置函数pivot强大的行转列功能的相关文章

Spark SQL内置函数

Spark SQL内置函数官网API:http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.functions%24 平常在使用mysql的时候,我们在写SQL的时候会使用到MySQL为我们提供的一些内置函数,如数值函数:求绝对值abs().平方根sqrt()等,还有其它的字符函数.日期函数.聚合函数等等.使我们利用这些内置函数能够快速实现我们的业务逻辑.在SparkSQL里其实也为我们提供了近

SQL内置函数

一.字符型函数(只是记录一些容易忘记的基本函数) 1.大小写转换函数 INITCAP:将字符串中每一个单词的第一个字母转换为大写,其他均为小写 SELECT INITCAP(column) FROM DUAL2.字符串处理函数 INSTR:从一个字符串中查找一个给定字符的数字位置 SELECT INSTR(String,'K') FROM DUAL LPAD:用给定的字符从左填充字符串到给定的长度 RPAD:用给定的字符从又填充字符串到给定的长度 3.字符串替代函数 REPLACE(string

SQL内置函数细讲

一.伪表.系统内置的只有一行一列数据的表.常用来执行函数. select 函数名 from dual 注:以下所有函数为了方便理解均用 伪表 做为事例! 二. 时间函数 1.sysdate:获取数据库系统的当前时间 例:select sysdate from dual 我们就会获取到当前系统的时间 2.add_months:对日期的月份进行加减 select add_months(日期, 数值) from dual 在这里的数值是必须要写的,如果不想对日期进行加减我们可以把数值写成0! 例:se

Oracle SQL 内置函数大全(转)

SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A         A      ZERO     SPACE--------- --------- --------- ---------65        97        48        32 2.CHR 给出整数,返回对应的字符;SQL> selec

spark2.3 SQL内置函数——Date window functions

1. def cume_dist(): Column –CUME_DIST 小于等于当前值的行数/分组内总行数–比如,统计小于等于当前薪水的人数,所占总人数的比例 d1,user1,1000 d1,user2,2000 d1,user3,3000 d2,user4,4000 d2,user5,5000 df.withColumn("rn1",cume_dist().over(Window.partitionBy(col("dept")).orderBy(col(&q

函数生成器、推导式及python内置函数

函数生成器.推导式及python内置函数 函数生成器 生成器的定义 在 Python 中,使用了 yield 的函数被称为生成器(generator). 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器. 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行. 调用一个生成器函数,返回的是一个迭代器对象. 生成器与迭代器的区别 生成

内置函数一(了解)

1. eval(): 执行字符串类型的代码,并返回最终结果 print(eval('5+4')) 2. exec:执行字符串类型的代码 s = ''' for i in [1,2,3]: print(i) ''' print(exec(s)) 以上两个内置函数很强大, 工作中禁止使用 3. hash():获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值. 4. help():用于查看函数或模块用途的详细说明. 5. callable():用于检查一个对象是否是可调用的.如

04_内置函数(二)

内置函数(二) 1.1 callable() 功能:函数是否可调用 示例1: def f1(): pass f1() f2 = 123 f2() # 输出结果 TypeError: 'int' object is not callable 示例2: def f1(): pass # f1() f2 = 123 # f2() print(callable(f1)) print(callable(f2)) # 输出结果 True False 1.2 chr() 功能:数字转字母,返回对应的ASCII

4)装饰器、迭代器、生成器以及内置函数

 装饰器.迭代器.生成器以及内置函数 装饰器: 原函数前后增加功能,切不改变函数的原本使用方式 import timedef wrapper(f):    def inner():        start = time.time()        f()        end = time.time()        print('执行效率为%s'%(end-start))    return inner @wrapperdef func():    print('this is func')