Oracle中的行列互转———pivot、unpivot函数用法

这篇具有很好参考价值的文章主要介绍了Oracle中的行列互转———pivot、unpivot函数用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、需求说明 

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

①使用decode 函数;

②使用case when 函数;

③使用pivot函数;

Oracle中行列互转_oracle行列转换最简单的方法https://blog.csdn.net/xiaochenXIHUA/article/details/120409641?ops_request_misc=&request_id=cb8c473afe7c418baef1d3294c3831ea&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~koosearch~default-1-120409641-null-null.268^v1^control&utm_term=%E8%A1%8C%E5%88%97&spm=1018.2226.3001.4450

二、实现方法

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

Oracle中的行列互转———pivot、unpivot函数用法

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";

Oracle中的行列互转———pivot、unpivot函数用法

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

需要转的内容如下图:

Oracle中的行列互转———pivot、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"));

Oracle中的行列互转———pivot、unpivot函数用法 

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

Oracle中的行列互转———pivot、unpivot函数用法  

三、参考资料

透视和逆透视 Oracle Database 11g | Oracle 中国https://www.oracle.com/cn/technical-resources/articles/database/sql-11g-pivot.htmlSELECT (oracle.com)https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF01702DECODE (oracle.com)https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions042.htm#SQLRF00631CASE Expressions (oracle.com)https://docs.oracle.com/cd/B28359_01/server.111/b28286/expressions004.htm#SQLRF20037文章来源地址https://www.toymoban.com/news/detail-483595.html

到了这里,关于Oracle中的行列互转———pivot、unpivot函数用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python常用函数】一文让你彻底掌握Python中的pivot_table函数

    任何事情都是由量变到质变的过程,学习Python也不例外。只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。本文和你一起来探索Python中的pivot_table函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固

    2024年02月12日
    浏览(33)
  • Oracle中xmltype类型toObject函数用法实例

    Oracle中xmltype类型toObject函数用法总结。 【实例一】 xmltype是oracle中的type object类型。在实际使用中,可以当做xml对象来使用: 执行结果 【实例二】嵌套类型 注意嵌套类型对应到xml上,需要以嵌套类型的名字为根节点:参考下面例子的person字段。 toObject函数实际将xmltype类型变

    2024年02月09日
    浏览(26)
  • Hive 和 Oracle 中 Decode 函数的用法差异

    在数仓构建过程中,需要从业务那边进行数据的迁移!数仓大多数公司都是使用 Hive ,而业务那边使用的是 Oracle 数据库居多。最近就有个小伙伴在迁移的时候碰到了问题: 从报错来看,在使用 Decode() 函数的时候,传参有问题! 既然问题来了,我们就来解决一下呗,只有不

    2024年02月10日
    浏览(32)
  • Oracle 正则,开窗,行列转换

    基本格式:         ..... 函数() over([partition by 分组列,...][order by 排序列 desc|asc][定位框架]) 聚合函数 over()可以不强制要求写partition by 和Order by 查询从第一行到当前行的工资总和   over后面的括号中的unbounded  preceding表示第一行,current  row表示当前行。上面这段代码指的是

    2024年04月18日
    浏览(22)
  • linux中的setenv函数用法

    在Linux系统中,setenv是一个用于设置环境变量的函数。它的语法如下: 其中,name参数表示要设置的环境变量名,value参数表示要为该变量设置的值,overwrite参数指示是否覆盖已存在的同名变量。如果overwrite参数为0,且已存在同名变量,则不会修改该变量;否则,将会覆盖原有

    2024年02月16日
    浏览(28)
  • MySQL中的cast()函数用法

    CAST()函数,把一个字段转成另一个字段,主要转化的是字段的类型 其语法为:cast(字段名 as 转换的类型 )                 转换的类型共有: CHAR            字符型                                               DATE            日期型                            

    2024年02月11日
    浏览(28)
  • 【SQL应知应会】行列转换(三)• Oracle版

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏, 本专栏 主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle

    2024年02月12日
    浏览(33)
  • Oracle数据库Clob类型Blob类型与String互转

    Clob类型为大字段类型默认4000长度,Blob为二进制类型常用存文件数据;这两种大字段类型开发中不会经常遇到,博主整理了这两种大字段与String的转换方法可参考(使用Junit直接测试)其中javax.sql.rowset.serial.SerialClob 和javax.sql.rowset.serial.SerialBlob两个类都是从JDK1.5引入;用到了

    2024年02月13日
    浏览(34)
  • Python中的睡眠函数用法详解

    Python中的睡眠函数用法详解 睡眠函数是Python中常用的函数之一,它允许程序在执行过程中暂停一段时间。在进行并发编程、定时任务或模拟等场景中,睡眠函数特别有用。本文将详细介绍Python中睡眠函数的用法,并提供相应的源代码。 Python中的睡眠函数由time模块提供,具体

    2024年02月05日
    浏览(41)
  • Python中的filter函数用法详解

    目录 引言 一、filter函数基本用法 二、filter函数应用场景 1、筛选符合条件的元素 2、数据清洗和预处理 3、复杂条件筛选 4、与其他函数结合使用 三、filter函数与lambda表达式 四、filter函数与列表推导式 五、总结 Python中的filter函数是一种内置的高效过滤器,用于从序列中筛选

    2024年02月21日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包