一、行转列

1.1、初始测试数据

表结构:TEST_TB_GRADE

Sql代码:

1    create table TEST_TB_GRADE

2    (

3      ID        NUMBER(10) not null,

4      USER_NAME VARCHAR2(20 CHAR),

5      COURSE    VARCHAR2(20 CHAR),

6      SCORE     FLOAT

7    )

初始数据如下图:

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

这就是最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的,具体的sql如下:

Sql代码:

1    select t.user_name,

2      sum(decode(t.course, '语文', score,null)) as CHINESE,

3      sum(decode(t.course, '数学', score,null)) as MATH,

4      sum(decode(t.course, '英语', score,null)) as ENGLISH

5    from test_tb_grade t

6    group by t.user_name

7    order by t.user_name

1.3、延伸

如果要实现对各门功课的不同分数段进行统计,效果图如下:

具体的实现sql如下:

Sql代码:

01    select t2.SCORE_GP,

02      sum(decode(t2.course, '语文', COUNTNUM,null)) as CHINESE,

03      sum(decode(t2.course, '数学', COUNTNUM,null)) as MATH,

04      sum(decode(t2.course, '英语', COUNTNUM,null)) as ENGLISH

05    from (

06      select t.course,

07             case when t.score  <60 then '00-60'

08                  when t.score >=60 and t.score <80  then '60-80'

09                  when t.score >=80 then '80-100' end as SCORE_GP,

10             count(t.score) as COUNTNUM

11      FROM test_tb_grade t

12      group by t.course,

13            case when t.score  <60  then '00-60'

14                  when t.score >=60 and t.score <80  then '60-80'

15                  when t.score >=80 then '80-100' end

16      order by t.course ) t2

17    group by t2.SCORE_GP

18    order by t2.SCORE_GP

二、列转行

1.1、初始测试数据

表结构: TEST_TB_GRADE2

Sql代码:

1    create table TEST_TB_GRADE2

2    (

3      ID         NUMBER(10) not null,

4      USER_NAME  VARCHAR2(20 CHAR),

5      CN_SCORE   FLOAT,

6      MATH_SCORE FLOAT,

7      EN_SCORE   FLOAT

8    )

初始数据如下图:

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

这就是最常见的列转行,主要原理是利用SQL里面的union,具体的sql语句如下:

Sql代码:

1    select user_name, 'CN_SCORE' COURSE , CN_SCORE as SCORE from test_tb_grade2

2    union

3    select user_name, 'MATH_SCORE' COURSE, MATH_SCORE as SCORE from test_tb_grade2

4    union

5    select user_name, 'EN_SCORE' COURSE, EN_SCORE as SCORE from test_tb_grade2

6    order by user_name,COURSE

也可以利用【insert all into ... select】来实现,首先需要先建一个表TEST_TB_GRADE3:

Sql代码:

1    create table TEST_TB_GRADE3

2    (

3          USER_NAME VARCHAR2(20 CHAR),

4          COURSE    VARCHAR2(20 CHAR),

5          SCORE     FLOAT

6    )

再执行下面的sql:

Sql代码:

1    insert all

2    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '语文', CN_SCORE)

3    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '数学', MATH_SCORE)

4    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '英语', EN_SCORE)

5    select user_name, CN_SCORE, MATH_SCORE, EN_SCORE from test_tb_grade2;

6    commit;

别忘记commit操作,然后再查询TEST_TB_GRADE3,发现表中的数据就是列转成行了。

oracle游标列转行,Oracle行转列和列转行相关推荐

  1. oracle 游标查询数据库,Oracle数据库使用游标查询结果集所有数据

    --Oracle使用游标查询结果集所有数据 DECLARE myTabelName NVARCHAR2(200):=''; --表名 myTableRowComment NVARCHAR2(200): ...

  2. oracle 游标的替代,Oracle中replace函数和translate函数以及简单的游标

    简要比较: replace:字符串级别的代替 如:SELECT REPLACE('acdd','cd','ef') FROM dual; →aefd translate:字符级别的代替 如:SELEC ...

  3. oracle游标缓存,【oracle】游标——数据的缓存区

    游标的使用可以让用户想错做数组一样操作查询出来的数据集,他提供了一种从集合性质的结果中提取单条记录的手段. 1.静态游标和REF游标. 2.静态游标分为显示游标(使用前必须有着明确的游标声明和定义)和 ...

  4. oracle游标的说法,oracle游标练习题.doc

    oracle游标练习题 oracle游标练习题 当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句.PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时 ...

  5. 1.VBA实现EXCEL中Sheet1的 甲列 相同数值的行对应的乙列的数的和作为Sheet2中丙列中与Sheet1中甲列 相同的行对应的丁列的值...

    今天有一同学,喊我帮忙处理EXCEL中数据的问题,题目表述太含糊,简单说,分3步工作: 1)找出SHEET1的"甲列"中相同的行, 2)把相同的行对应的"乙列" ...

  6. oracle 游标非空,oracle 游标判空步骤

    oracle 游标判空方法 create or replace package TAL_TEST is TYPE myCursorType IS REF CURSOR; --测试空游标 PROCEDU ...

  7. oracle 游标 内联,oracle – EXEC_SQL,EXECUTE IMMEDIATE,DBMS_SQL和内联SQL之间的区别

    1)您不能在PL / SQL块内执行直接DDL. BEGIN CREATE TABLE TEST AS ( SELECT * FROM FND_USER ); EXCEPTION WHEN OTHER ...

  8. Oracle游标有何用,Oracle游标使用方法有哪些?

    在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行.显式游标只有在需要获得多行数据的情况下使用.PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法. UPDATE或D ...

  9. 使用oracle 游标修改数据,Oracle 函数施行修改和游标传递

    Oracle 函数执行修改和游标传递 ORA-14551:不能在查询语句中执行dml语句,开始误以为函数里不能执行DML或DDL语句,后查到前辈通过采用自治事务解决,在此基础上演例 传递SQL语句对数 ...

  10. pandas笔记:根据列索引名称/行索引名称 对列重新排序

    源数据: import pandas as pd frame=pd.DataFrame(np.arange(12).reshape((4,3)),columns=['c','a','b'],index ...

最新文章

  1. 技术图文:Python的属性装饰器详解
  2. C++为什么要内存对齐
  3. Xilinx 拥抱“新基建” 发力大中华区核心市场
  4. 微服务很香--麻辣味,但要慢慢消化
  5. 框架学习与探究之AOP--Castle DynamicProxy
  6. php中gd为什么是乱码的,php gd库中文乱码怎么解决?
  7. 形态学运算中腐蚀,膨胀,开运算和闭运算
  8. 标准IO库fgets和fputs对一个文本文件的读写操作
  9. 零碎技术栈01_UML画图分析
  10. 数学基础知识02——常用积分公式
  11. TOMCAT假死分析
  12. 商业智慧:创造奇迹的信件
  13. linux cpu睿频,如何实现CPU单核睿频?
  14. 宽带服务器无响应678,宽带连接错误678怎么办 是什么原因导致的【解决方法】...
  15. 如何用excel搭建数据模型,销售数据管理软件
  16. scons脚本应用笔记
  17. 【学习笔记】Splay
  18. Ubuntu18.4设置永久DNS
  19. esxi突然启动不起来了!显示:Error loading /sb.v00
  20. M3u8或者ts协议的直播流视频,如何通过加密防止盗链和盗播?

热门文章

  1. Cordova中第三方UI插件的使用(2)--Topcoat
  2. Dirty Approach之无招胜有招
  3. 唯智信息:制造业如何在物流4.0时代更好地智能化发展
  4. Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,Begin
  5. Proteus仿真数字钟表电路实验报告(可下载工程文件)
  6. 成都玖益科技:店铺流量提升的意义
  7. 【NFS服务】Linux/Ubuntu 搭建NFS服务器
  8. 红米Note10Pro安装twrp教程
  9. 微信小程序数据 \n 换行符失效解决办法
  10. STM32--矩阵键盘的设计实现