pivot和unpivot函数

今天小编整理的都是固定行转列(列转行)的例子!

一:unpivot列转行函数
举例演示:
创建一张表tmp_test,数据如图所示

代码展示:
select code,name,cource,grade from tmp_test
unpivot(
grade for source in (chinese,math,english)
);
数据结果展示:

二:pivot行转列函数
举例演示:
创建一张表tmp_test2,数据如图所示

代码展示:
select *
from (select username,subject,source from tmp_test2)
pivot (sum(source)
for subject in (‘语文‘ 语文,‘数学‘ 数学,‘英语‘ 英语));
数据结果展示:

其实该sql也可以用decode函数实现:
select username,
sum(decode(subject,‘语文‘,source,0)) 语文,
sum(decode(subject,‘数学‘,source,0)) 数学,
sum(decode(subject,‘英语‘,source,0)) 英语,
from tmp_test2
group by username;

总结:
pivot函数:行转列函数:
  语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值));
unpivot函数:列转行函数:
  语法:unpivot(新增值所在列的列名 for 新增列转为行后所在列的列名 in (需转为行的列名));
执行原理:将pivot函数或unpivot函数接在查询结果集的后面。相当于对结果集进行处理。
注:另外有的人说in后面可以跟子查询语句,这个我也不能肯定,但是我在这次例子中自己去尝试了,是不可以的。ORA-00936:缺失表达式

关于这一点,有兴趣的小伙伴可以自己私下再去尝试一下!

今天就先到这里吧,至于动态的行转列我们下次在讨论!

原文地址:https://blog.51cto.com/12777507/2404262

时间: 2024-10-12 21:10:57

pivot和unpivot函数的相关文章

pivot 与 unpivot 函数是SQL05新提供的2个函数

pivot 与 unpivot 函数是SQL05新提供的2个函数   ------------------------------------------------------------------------------ pivot函数: create table test(id int,name varchar(20),quarter int,profile int)insert into test values(1,'a',1,1000)insert into test values(

pivot 与 unpivot函数

pivot 与 unpivot函数pivot 与 unpivot 函数是SQL05新提供的2个函数 灰常灰常的实用 ------------------------------------------------------------------------------ pivot函数: create table test(id int,name varchar(20),quarter int,profile int)insert into test values(1,'a',1,1000)i

oracle pivot 和 unpivot 函数的使用

pivot的格式select from( inner_query)pivot(aggreate_function for pivot_column in ( list of values))order by ...;用法举例:select from (select month,prd_type_id,amountfrom all_sales)pivot (sum(amount) for month in (1 as JAN,2 as FEB,3 as MAR,4 as APR)) order b

oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )

create table demo(id int,name varchar(20),nums int); ---- 创建表insert into demo values(1, '苹果', 1000);insert into demo values(2, '苹果', 2000);insert into demo values(3, '苹果', 4000);insert into demo values(4, '橘子', 5000);insert into demo values(5, '橘子',

Oracle11g 行列转换函数PIVOT and UNPIVOT

作为Oracle开发工程师,推荐大伙看看 PIVOT and UNPIVOT Operators in Oracle Database 11g Release 1 This article shows how to use the new PIVOT and UNPIVOT operators in 11g, as well as giving a pre-11g solution to the same problems. PIVOT UNPIVOT Related articles. PIV

Pivot 和 Unpivot

Pivot 和 Unpivot 作者:Arup Nanda  使用简单的 SQL 以电子表格类型的交叉表报表显示任何关系表中的信息,并将交叉表中的所有数据存储到关系表中. Pivot 如您所知,关系表是表格化的,即,它们以列-值对的形式出现.假设一个表名为 CUSTOMERS.SQL> desc customers Name Null? Type ----------------------------------------- -------- ------------------------

PIVOT和UNPIVOT使用详解

一.使用PIVOT实现数据表的列转行 建表语句: 1 DROP TABLE STUDENT; 2 CREATE TABLE STUDENT ( 3 学生编号 VARCHAR2(20 BYTE) NULL , 4 姓名 VARCHAR2(20 BYTE) NULL , 5 性别 VARCHAR2(20 BYTE) NULL , 6 所属班级 VARCHAR2(20 BYTE) NULL 7 ) 8 ; 9 10 -- ---------------------------- 11 -- Recor

sql pivot、unpivot和partition by用法

原文:sql pivot.unpivot和partition by用法 演示脚本 IF not exists(SELECT 1 from sys.sysobjects where name = 'Student' AND type = 'U') BEGIN CREATE table Student( ID int identity primary key, ClassID int default 0 , --班级ID CourseName nvarchar(20) , --课程 Name nva

使用pivot和聚合函数将表中的行的值转为列产生新的表

原表格:V_ChannelReward结构为: select * from V_ChannelReward pivot (max(RewardSum) for RewardItem in ([星级奖励],[自建空充酬金],[首充酬金],[BOSS待办酬金],[激活酬金],[神州行上网套餐拓展酬金],[其他],[新增客户与裸机捆绑销售],[实名登记酬金],[宽带业务酬金],[2G渠道体系酬金],[3G渠道体系酬金],[数据业务酬金],[开户激励酬金],[开户基础酬金],[在网酬金],[维系酬金],