Oracle使用pivot和unpivot函数实现行列转换

 更新时间:2023年06月15日 09:20:13   作者:牛奶咖啡13  
项目开发过程中常常会涉及到oracle数据库的一个数据操作,那就是行列的互转,本文为大家介绍了两个可以实现这一操作的函数pivot和unpivot,感兴趣的可以了解一下

一、需求说明 

项目开发过程中涉及到oracle数据库的数据操作;但是需要将数据进行列的互转,通过查阅资料可知在oracle中有三种方式可以实现行列互转:

①使用decode 函数;

②使用case when 函数;

③使用pivot函数;

参考:Oracle中实现行列互转的方法分享

二、实现方法

我这里有一个数据表内容如下:

2.1、实现将上图内容转为行——decode函数

select
  "name",
  max(decode("course", '语文', "score")) 语文,
  max(decode("course", '数学', "score")) 数学,
  max(decode("course", '英语', "score")) 英语,
  sum("score") 总分
from "grade"
group by "name";

2.2、实现将上图内容转为行——case when函数

select
  "name",
  max(case when "course"  = '语文' then "score" end) 语文,
  max(case when "course" = '数学' then "score" end) 数学,
  max(case when "course" = '英语' then "score" end) 英语,
  sum("score") 总分
from "grade"
  group by "name";

2.3、实现将上图内容转为行——pivot函数

pivot函数的语法:

pivot(聚合函数 for 列名 in(类型))
 
select t.* from(
(select * from 原表名称) 
pivot(
    max(需转的列名称) 
    for 需转的列名称 in(需转列对应的值1,需转列对应的值2,需转列对应的值3
     )
)t

SELECT t.*,(t.语文+t.数学+t.英语)总分 from ((SELECT "name","course","score" from "grade")pivot
(
	 max("score") 
	 for "course" in('语文' 语文,'数学' 数学,'英语' 英语)
))t ORDER BY "name";

2.4、实现将上图内容转为列——unpivot函数

需要转的内容如下图:

unpivot函数的语法:

SELECT 列名称,需定义的列1名称,需定义的列2名称 from 表名称 unpivot (需定义的列2名称 for 需定义的列1名称 in(列2值1,列2值2,列2值3));

SELECT "name" 名字,course 课程,score 分数 from "grade2" unpivot (score for course in("chinese","math","english"));

SELECT 名字,course 课程,score 分数 from (
SELECT "name" 名字,"chinese" 语文,"math" 数学,"english" 英语 from "grade2") unpivot (score for course in(语文,数学,英语))

到此这篇关于Oracle使用pivot和unpivot函数实现行列转换的文章就介绍到这了,更多相关Oracle行列转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle中大对象(LOB)处理方法

    Oracle中大对象(LOB)处理方法

    这篇文章介绍了Oracle中大对象(LOB)的处理方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Oracle索引失效的情况及处理过程

    Oracle索引失效的情况及处理过程

    Oracle数据库中索引失效可能的原因包括数据分布不均匀、数据类型转换、函数操作、操作符不匹配、统计信息不准确、数据修改频繁以及数据量很小等
    2026-01-01
  • ORACLE出现错误1033和错误ORA-00600的解决方法

    ORACLE出现错误1033和错误ORA-00600的解决方法

    这篇文章主要介绍了ORACLE出现错误1033和错误ORA-00600的解决方法,需要的朋友可以参考下
    2014-07-07
  • 六分钟学会创建Oracle表空间的实现步骤

    六分钟学会创建Oracle表空间的实现步骤

    这里介绍创建Oracle表空间的步骤,首先查询空闲空间、增加Oracle表空间、修改文件大小语句如下、创建Oracle表空间,最后更改自动扩展属性
    2013-06-06
  • 新Orcas语言特性-查询句法

    新Orcas语言特性-查询句法

    新Orcas语言特性-查询句法...
    2007-04-04
  • 生产环境Oracle undo表空间管理实践

    生产环境Oracle undo表空间管理实践

    这篇文章主要介绍了生产环境Oracle undo表空间管理实践,Oracle 数据库有一种维护信息的方法,用于回滚或撤消对数据库的更改,下面文章分享更多的相关资料需要的小伙伴可以参考一下
    2022-03-03
  • Oracle数据库统计信息方法详解

    Oracle数据库统计信息方法详解

    这篇文章主要介绍了如何查看和收集Oracle数据库中的统计信息,包括表、索引和列的统计信息,介绍了DBMS_STATS包的功能和使用方法,以及如何通过分析和删除统计信息来优化数据库性能,需要的朋友可以参考下
    2024-12-12
  • oracle安装出现乱码等相关问题

    oracle安装出现乱码等相关问题

    oracle安装过程中出现乱码等一系列相关问题,本文将介绍如何解决,需要了解的朋友可以参考下
    2012-11-11
  • oracle to_char函数将number转成string

    oracle to_char函数将number转成string

    很多数据转换处理操作时,会遇到将0.007007040000转换成0.70%的需求,我们使用Oracle 的SQL 函数 to_char可以实现这种转换,需要了解的朋友可以参考下
    2012-11-11
  • Oracle 语句优化分析说明

    Oracle 语句优化分析说明

    Oracle 语句优化技巧,大家可以参考使用,使你的oracle运行效率更高更好。
    2009-09-09

最新评论