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

 更新时间:2023年06月15日 09:13:06   作者:牛奶咖啡13  
这篇文章主要为大家总结了Oracle中实现行列互转的简单方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下

一、使用Case when 实现列转为行(多行一列-->一行多列)

1.1、实现效果

①原表效果

②实现将Course课程列内容转为行效果【实现将每个人员的课程信息合成一行,且获取到课程总分】

1.2、列转行(多行一列-->一行多列)

sql语句

SELECT NAME, 
       MAX(CASE WHEN COURSE='语文' THEN  SCORE END) "语文", 
       MAX(CASE WHEN COURSE='数学' THEN  SCORE END) "数学", 
       MAX(CASE WHEN COURSE='英语' THEN  SCORE END) "英语", 
       MAX(CASE WHEN COURSE='物理' THEN  SCORE END) "物理", 
       SUM(SCORE) "总分" 
FROM stu GROUP BY NAME;

二、使用 Case When 实现行转列(一行多列-->多行一列)

2.1、实现效果

①原表效果

②实现将多个数字列转为一列效果

2.2、行转列(一行多列-->多行一列)

sql语句

SELECT NAME, 
  CASE 
   WHEN LV = 1 THEN  '语文' --常量 
   WHEN LV = 2 THEN  '数学' --常量 
   WHEN LV = 3 THEN  '英语' --常量 
   WHEN LV = 4 THEN  '物理' --常量 
  END 科目, 
  CASE 
   WHEN LV = 1 THEN langu --列名 
   WHEN LV = 2 THEN math--列名 
   WHEN LV = 3 THEN english--列名 
   WHEN LV = 4 THEN pycial--列名 
  END 成绩 
FROM (  SELECT * FROM course, (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 4)  ) --成绩对应的列数
ORDER BY 1, 2;

三、将结果集转为一行

①查询到每个部门的人数

--查询每个部门的人数 
SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO ORDER BY 1; 

②将查询到的每个部门人数的结果集【转为一行】 

--将上面的结果转为一行,可以使用 SUM 或者 COUNT 来求出。 
SELECT SUM(CASE WHEN DEPTNO = 10 THEN 1 END) D_10, 
       SUM(CASE WHEN DEPTNO = 20 THEN 1 END) D_20, 
       SUM(CASE WHEN DEPTNO = 30 THEN 1 END) D_30 
 FROM EMP; 
--也可以使用下面的方法。 
SELECT CASE WHEN DEPTNO = 10 THEN CN END D_10, 
       CASE WHEN DEPTNO = 20 THEN CN END D_20, 
       CASE WHEN DEPTNO = 30 THEN CN END D_30 
  FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO); 
--和刚讲的一样,生成了三行三列数据,使用 MAX 来获取。 
SELECT MAX(CASE WHEN DEPTNO = 10 THEN CN END) D_10, 
       MAX(CASE WHEN DEPTNO = 20 THEN CN END) D_20, 
       MAX(CASE WHEN DEPTNO = 30 THEN CN END) D_30 
  FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO);

四、将结果集转为多行

SELECT MAX(CASE JOB WHEN 'CLERK' THEN ENAME END) CLERK, 
       MAX(CASE JOB WHEN 'ANALYST' THEN ENAME END) ANALYST,      
       MAX(CASE JOB WHEN 'MANAGER' THEN ENAME END) MANAGER, 
       MAX(CASE JOB WHEN 'PRESIDENT' THEN ENAME END) PRESIDENT, 
       MAX(CASE JOB WHEN 'SALESMAN' THEN ENAME END) SALESMAN 
  FROM (SELECT ENAME, 
               JOB, 
               --每组都是从 1 开始排序,而每列里面只有一组有数据。也就是 RN 相同的在每列里面只有一条数据
               ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY ENAME) RN 
          FROM EMP) 
GROUP BY RN 
ORDER BY RN;

到此这篇关于Oracle中实现行列互转的方法分享的文章就介绍到这了,更多相关Oracle行列互转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle19c安装与基本配置教程(超详细!)

    Oracle19c安装与基本配置教程(超详细!)

    oracle19c数据库安装相对于oracle12c安装还是有些不一样的,所以今天再来记录一下安装过程,下面这篇文章主要给大家介绍了关于Oracle19c安装与基本配置的超详细教程,需要的朋友可以参考下
    2023-01-01
  • Windows下编写批处理脚本来启动和重置Oracle数据库

    Windows下编写批处理脚本来启动和重置Oracle数据库

    这篇文章主要介绍了Windows下编写cmd脚本来对Oracle数据库执行启动和重置的方法,只需在bat文件中保存cmd shell之后就可以双击使用,简单粗暴,需要的朋友可以参考下
    2016-03-03
  • Oracle数据库自定义类型type的用法详解

    Oracle数据库自定义类型type的用法详解

    这篇文章主要介绍了Oracle数据库自定义类型type的用法详解,Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库,可以看作是 Oracle 就只有一个大数据库,需要的朋友可以参考下
    2023-07-07
  • Oracle表结构查询之如何获取列信息与注释

    Oracle表结构查询之如何获取列信息与注释

    本文主要介绍了Oracle数据库中表结构信息的基本知识,包括表名、列名、数据类型、数据长度、可空性、默认值以及字段注释等,这些信息对于理解数据库设计和维护非常重要,同时,提供了基本的查询示例
    2024-10-10
  • plsql连接oracle数据库报ora 12154错误解决方法

    plsql连接oracle数据库报ora 12154错误解决方法

    今天遇到一个问题,plsql连接oracle数据库报ora 12154错误,本文将为您详细介绍此等问题的解决方法
    2012-11-11
  • 解析Oracle查询和删除JOB的SQL

    解析Oracle查询和删除JOB的SQL

    本篇文章是对Oracle查询和删除JOB的SQL的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • Oracle数据行拆分多行方法示例

    Oracle数据行拆分多行方法示例

    oracle数据库使用过程中,怎样将一行或者多行数据分割成需要的多行数据,本文我们就来看看具体方法,需要的朋友可以参考。
    2017-10-10
  • Oracle数据库执行计划的查看与分析技巧

    Oracle数据库执行计划的查看与分析技巧

    在 Oracle 数据库中,执行计划能够帮助我们深入了解 SQL 语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是 Oracle 数据库优化器为 SQL 语句生成的一种执行蓝图,本文给大家介绍了Oracle数据库执行计划的查看与分析技巧,需要的朋友可以参考下
    2024-12-12
  • oracle数据匹配merge into的实例详解

    oracle数据匹配merge into的实例详解

    这篇文章主要介绍了oracle数据匹配merge into的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • 详解Oracle游标的简易用法

    详解Oracle游标的简易用法

    这篇文章主要介绍了详解Oracle游标的简易用法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论