FREE教程
目录
  • 主页
  • Oracle教程
  • redis教程
  • hadoop
  • ODI教程
  • BIEE教程
Oracle基础教程
Oracle基础教程 Oracle介绍 Oracle安装 Oracle客户端工具 Oracle服务 Oracle用户 SQL语句介绍 案例所需表结构 Oracle建表(create table) Oracle查询(select) Oracle插入(insert into) Oracle更新(update) Oracle删除(delete) Oracle运算符 Oracle字符串连接符|| Oracle DISTINCT Oracle 条件查询 =、IN、LIKE、BETWEEN...AND Oracle集合运算 Oracle连接查询 Oracle的伪列 Oracle 函数 Oracle字符型函数 Oracle日期型函数 Oracle数值型函数 Oracle转换函数 Oracle聚合函数 Oracle子查询 Oracle synonym 同义词 Oracle序列 Oracle视图 Oracle索引 Oracle分区详解和创建 Oracle如何在分区表上创建索引 oracle merge into命令 oracle物化视图 oracle分析函数_开窗函数详解 Oracle行转列(PIVOT) Oracle列转行_unpivot Oracle创建物化视图
分类导航
Oracle基础教程 PL/SQL教程 Oracle管理 Oracle备份和恢复 Oracle RAC Oracle优化 Oracle技术 redis基础教程 hadoop教程
    首页->Oracle教程->Oracle基础教程->Oracle行转列(PIVOT)
oracle分析函数_开窗函数详解
Oracle列转行_unpivot

Oracle行转列(PIVOT)

在实际业务开发环境中,我们经常会遇到要对查询的数据集进行行转列的需求。那么Oracle是如何一一实现的呢?本文也将通过几个实例来详细讲解一下。

Oracle行转列

    Oracle行转列就是把某一个字段的值作为唯一值,然后另外一个字段的行值转换成它的列值。这里依然利用我们系统的学生成绩表作为例子,成绩表记录(行)当中对应着每一个科目的每一个学生的成绩,那我们要做出一个报表是每个学生的所有科目作为一列展示出学生的成绩信息。案例数据如下:

oracle行转列

那我们要如何实现呢?下面就一一介绍几种方法:

1、首先我们肯定想到的是利用Oracle分组(group by)应该可以实现,实现代码如下:

select c.stuname,
       --利用分组聚合函数
       sum(decode(b.coursename, '英语(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '数学(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '语文(2018上学期)', t.score, 0)) as "英语(2018上学期)"
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid
 group by c.stuname

我们利用group by对学生进行分组,然后利用decode对对应的课程的成绩值进行转换,然后再求和即可得到该门成绩的结果值,结果如下:

Oracle行转列

2、Oracle11g之后提供了自带函数PIVOT可以完美解决这个行转列的需求,具体语法结构如下:

SELECT * FROM (数据查询集)
PIVOT 
(
 SUM(Score/*行转列后 列的值*/) FOR 
 coursename/*需要行转列的列*/ IN (转换后列的值)
)

    具体代码如下:

select * from  (select c.stuname,
       b.coursename,
       t.score
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid )  /*数据源*/
PIVOT 
(
 SUM(score/*行转列后 列的值*/) 
 FOR coursename/*需要行转列的列*/ IN ('英语(2018上学期)' as 英语,'数学(2018上学期)' as 数学,'语文(2018上学期)' as 语文 )
) ;

    结果如下:

Oracle pivot


oracle分析函数_开窗函数详解
Oracle列转行_unpivot
关于我们 | 免责声明 | Copyright ? 2018 FREE教程 | 备案号:闽ICP备18020855号-1
公安备案

闽公网安备 35020602001245号