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

2023-12-04 0 389
目录
  • 一、需求说明
  • 二、实现方法
    • 2.1、实现将上图内容转为行——decode函数
    • 2.2、实现将上图内容转为行——case when函数
    • 2.3、实现将上图内容转为行——pivot函数
    • 2.4、实现将上图内容转为列——unpivot函数

一、需求说明

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

①使用decode 函数;

②使用case when 函数;

③使用pivot函数;

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

二、实现方法

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

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使用pivot和unpivot函数实现行列转换的文章就介绍到这了,更多相关Oracle行列转换内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Oracle Oracle使用pivot和unpivot函数实现行列转换 https://www.u-9.cn/database/oracle/68332.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务