目录结构如下:
行转列
列转行
[一]、行转列
 
1.1、初始测试数据
 
表结构:TEST_TB_GRADE
 
Sql代码 
create table TEST_TB_GRADE 

  ID        NUMBER(10) not null, 
  USER_NAME VARCHAR2(20 CHAR), 
  COURSE    VARCHAR2(20 CHAR), 
  SCORE     FLOAT 

 初始数据如下图:

                     
 
1.2、 如果需要实现如下的查询效果图:

                  
 
这就是最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的,具体的sql如下:
Sql代码 
select t.user_name, 
  sum(decode(t.course, '语文', score,null)) as CHINESE, 
  sum(decode(t.course, '数学', score,null)) as MATH, 
  sum(decode(t.course, '英语', score,null)) as ENGLISH 
from test_tb_grade t 
group by t.user_name 
order by t.user_name 
 
 
1.3、延伸
 
如果要实现对各门功课的不同分数段进行统计,效果图如下:

               
 
具体的实现sql如下:
Sql代码 
select t2.SCORE_GP, 
  sum(decode(t2.course, '语文', COUNTNUM,null)) as CHINESE, 
  sum(decode(t2.course, '数学', COUNTNUM,null)) as MATH, 
  sum(decode(t2.course, '英语', COUNTNUM,null)) as ENGLISH 
from ( 
  select t.course, 
         case when t.score  <60 then '00-60' 
              when t.score >=60 and t.score <80  then '60-80' 
              when t.score >=80 then '80-100' end as SCORE_GP, 
         count(t.score) as COUNTNUM 
  FROM test_tb_grade t 
  group by t.course,  
        case when t.score  <60  then '00-60' 
              when t.score >=60 and t.score <80  then '60-80' 
              when t.score >=80 then '80-100' end 
  order by t.course ) t2 
group by t2.SCORE_GP 
order by t2.SCORE_GP 
 
[二]、列转行
 
1.1、初始测试数据
        表结构:TEST_TB_GRADE2
Sql代码 
create table TEST_TB_GRADE2 

  ID         NUMBER(10) not null, 
  USER_NAME  VARCHAR2(20 CHAR), 
  CN_SCORE   FLOAT, 
  MATH_SCORE FLOAT, 
  EN_SCORE   FLOAT 

 
        初始数据如下图:

  
 
1.2、 如果需要实现如下的查询效果图:

                    
 
这就是最常见的列转行,主要原理是利用SQL里面的union,具体的sql语句如下:
Sql代码 
select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2  
union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2  
union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2  
order by user_name,COURSE  
 
 也可以利用【 insert all into ... select 】来实现,首先需要先建一个表TEST_TB_GRADE3:
Sql代码 
create table TEST_TB_GRADE3   
    (  
      USER_NAME VARCHAR2(20 CHAR),   
      COURSE    VARCHAR2(20 CHAR),   
      SCORE     FLOAT   
    )   
 再执行下面的sql:
 
Sql代码 
insert all 
into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '语文', CN_SCORE) 
into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '数学', MATH_SCORE) 
into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '英语', EN_SCORE) 
select user_name, CN_SCORE, MATH_SCORE, EN_SCORE from test_tb_grade2; 
commit; 
 别忘记commit操作,然后再查询TEST_TB_GRADE3,发现表中的数据就是列转成行了。

转载于:https://www.cnblogs.com/xiaofengfeng/p/3407095.html

Oracle行列转换小结相关推荐

  1. Oracle 行列转换

    Oracle 行列转换 1.固定列数的行列转换 如 student subject grade --------- ---------- -------- student1 语文 80 student ...

  2. Oracle 行列转换函数pivot使用

    问题描述: 描述:在项目中,需要将表中日期数据行,用视图转列显示月报表 解决方案: 注意:多聚合必须重命名. create table pivottest( 主键 varchar2(50) defau ...

  3. oracle 总转横函数,详解Oracle行列转换函数-pivot函数和unpivot函数-多智时代

    今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧! 行列转换 pivot函数:行转列函数 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): ...

  4. Oracle行列转换的思考与总结

    最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case wh ...

  5. Oracle 行列转换总结

    行列转换包括以下六种情况: *列转行 *行转列 *多列转换成字符串 *多行转换成字符串 *字符串转换成多列 *字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的 ...

  6. oracle行列转换总结

    最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希望对大家有所帮助,同时有何错疏,恳请大家指出, 我也是在写作过程中学习,算是一起和大家学习吧. 行列转换包括以下六 ...

  7. oracle行列转换关联union的方式_几行代码轻松玩转 Excel 行列转换

    几行代码轻松玩转 Excel 行列转换 下面这种交叉式的 Excel 表是很常见的格式,用来填写和查看都比较方便: 但是,如果想做进一步的统计分析,这种格式就不方便了,需要行列转换,变成如下格式的明细 ...

  8. oracle 的行列转换函数,Oracle行列转换函数

    VM_CONCAT vm_concat可以用来进行行转列,默认以逗号分隔,可通过vm_concat(name,',','|')修改为|1 2 3 4 5 6 7 8 9 10 11 12 13SQL& ...

  9. oracle行列转换

    多行转一行: 表结构: 1  A 1  B 1  C 2  A 2  B 3  C 3  F 4  D 转换后变成: 1  A,B,C 2  A,B 3  C,F 4  D 这个不排序: SELECT ...

最新文章

  1. 一致性 hash 算法( consistent hashing )
  2. python lambda函数_python入门基础之lambda匿名函数
  3. Android中的常见布局
  4. 京东商城pop开放平台产品经理
  5. android项目 之 记事本(6)----- 加入手写
  6. 展讯康一:2020年推出5G芯片 第一桶金含金量最高
  7. setNeedsDisplay看我就懂!
  8. linux平台C++开发基本知识
  9. java的队列实现方法_Java实现队列的三种方法集合
  10. Java线程池的实现原理,你清楚么?
  11. python中如何计算集合的长度_Python如何计算序列长度 python dataframe中元素如何统计?...
  12. 简练软考知识点整理-公邀竞单询其
  13. .net上传大文件不成功
  14. ajax调用webService
  15. 设计模式六大原则,你真的懂了吗?
  16. 传智杯2021年第三届传智杯全国大学生IT技能大赛(决赛B组)python小白解题思路
  17. 刘同——谁的青春不迷茫,给你冬日满满正能量
  18. android6.0获取通讯录权限
  19. WIN10下调用waveInOpen方法失败返回错误1的解决方法
  20. vue+图片裁剪vue-cropper以及api

热门文章

  1. mysql绿色版安装
  2. JavaScript算法相关
  3. Linux下配置LVM
  4. 百年难得一见!阿里园区惊现双月争辉奇观!
  5. 多元时代个人信息更需强有力保护
  6. MapReduce实现手机上网日志分析(分区)
  7. Nginx 笔记与总结(14)expires 缓存设置
  8. Java 全半角转换
  9. Win7下硬盘安装Ubuntu10.10双系统
  10. 通过日志恢复SQL Server的历史数据