oracle横表怎么转纵表

2023年 4月 15日 68.3k 0

在oracle中,可以利用pivot()函数将横表转为纵表,该函数用于将行转为列,语法为“SELECT * FROM (数据查询集)PIVOT(SUM(行转列后 列的值)FOR 需要行转列的列 IN (转换后列的值))”。 本教程

在oracle中,可以利用pivot()函数将横表转为纵表,该函数用于将行转为列,语法为“SELECT * FROM (数据查询集)PIVOT(SUM(行转列后 列的值)FOR 需要行转列的列 IN (转换后列的值))”。

本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。

oracle横表怎么转纵表

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

13.png

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

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对对应的课程的成绩值进行转换,然后再求和即可得到该门成绩的结果值,结果如下:

14.png

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 语文 )
) ;

结果如下:

15.png

推荐教程:《Oracle视频教程》

以上就是oracle横表怎么转纵表的详细内容,更多请关注每日运维其它相关文章!

【文章原创作者:韩国机房 http://www.558idc.com/kt.html欢迎留下您的宝贵建议】

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论