oracle横表怎么转纵表

oracle横表怎么转纵表,第1张

oracle横表怎么转纵表

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

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

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

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视频教程》

以上就是oracle横表怎么转纵表的详细内容,

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1372419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-16
下一篇 2022-06-16

随机推荐

  • 最狠毒无情个性签名 超心狠绝情的个性签名

    1、你难过的,不是他没选择你,不是他撩到一半就跑,是他连承认的勇气都没有,是他费尽心机却装作真诚以待,是他毫发无损到全身而退。2、我曾经跨过山和大海,也穿过人山人海,我曾经拥有1、你难过的,不是他没选

    2022-09-29
    0 0 0
  • 11月份可以种红菜苔吗

    11月份可以种红菜苔,但植株生长不良。红菜苔适宜在8~10月份种植,选择土质疏松、透气、肥沃的土壤。将颗粒饱满、健康的种子种植至土壤,浇适量的水即可。出苗后需要补充适量的养11月份可以种红菜苔,但植株

    2022-09-29
    0 0 0
  • 海洋法系和大陆法系的区别

    海洋法系和大陆法系的区别:范围不同:海洋法系包括美国、加拿大、印度、巴基斯坦、孟加拉、马来西亚、新加坡、澳大利亚、新西兰以及非洲的个别国家和地区。属于大陆法系的除法海洋法系和大陆法系的区别:范围不同:

    2022-09-29
    0 0 0
  • 激光祛红血丝可靠吗

    比较可靠。激光是可以有效的去红血丝的,是一种比较理想的方法。激光去红血丝发射的专门用来治疗血管的激光进到我们的真皮层里,激发肌底的胶原蛋白快速增多,以达到治疗效果。这比较可靠。激光是可以有效的去红血丝

    2022-09-29
    0 0 0
  • 头发长得快是什么原因

    头发长得快,有以下原因:第一、保持良好的情绪,经常进行深呼吸,散步,做松驰体操以消除精神疲劳和压力。另外保证充足的睡眠,睡前用热水泡脚,帮助睡眠,有利于头发的养护。第二、多吃一头发长得快,有以下原因:

    2022-09-29
    0 0 0
  • 反光材料成分有哪些标准

    反光类服装是由反光材料(反光带或晶格带)和基底面料两部分构成,夜晚当有灯光照耀时,反光材料会将部分光线反射回来,以警示看到反射光线的人,多用在交管、环卫、石油等需要户外作反光类服装是由反光材料(反光带

  • 微信发信息没有声音是怎么回事

    以微信版本为8.0.0,系统为iOS14.3的iPhone12为例:1、可能是因为手机音量没打开导致的,此时按住手机侧面的音量键将声音调大即可。2、可能是因为手机开启了静音模式,消息提示音关以微信版本

  • 移动硬盘什么牌子好

    移动硬盘是生活中常会用到的一个东西,但由于目前市面上所售移动硬盘种类繁多且质量良莠不齐,因而很多人在购买的时候都纠结着买哪种,那么移动硬盘什么牌子好?哪个牌子移动硬盘耐移动硬盘是生活中常会用到的一个东

  • 结婚买的红内衣可以洗不

    结婚可以说是人的一生中最为重要的一件事前,也是正因此,大家在衣食住行上各方面都做到事无巨细,尤其是当天的穿衣上更是讲究的不行,那么结婚买的红内衣可以洗不?结婚红色内衣要买结婚可以说是人的一生中最为重要

发表评论

登录后才能评论

评论列表(0条)

保存