oracle游标列转行,Oracle行转列和列转行
一、行转列
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行转列和列转行相关推荐
- oracle 游标查询数据库,Oracle数据库使用游标查询结果集所有数据
--Oracle使用游标查询结果集所有数据 DECLARE myTabelName NVARCHAR2(200):=''; --表名 myTableRowComment NVARCHAR2(200): ...
- oracle 游标的替代,Oracle中replace函数和translate函数以及简单的游标
简要比较: replace:字符串级别的代替 如:SELECT REPLACE('acdd','cd','ef') FROM dual; →aefd translate:字符级别的代替 如:SELEC ...
- oracle游标缓存,【oracle】游标——数据的缓存区
游标的使用可以让用户想错做数组一样操作查询出来的数据集,他提供了一种从集合性质的结果中提取单条记录的手段. 1.静态游标和REF游标. 2.静态游标分为显示游标(使用前必须有着明确的游标声明和定义)和 ...
- oracle游标的说法,oracle游标练习题.doc
oracle游标练习题 oracle游标练习题 当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句.PL/SQL管理隐式游标,当查询开始时隐式游标打开,查询结束时 ...
- 1.VBA实现EXCEL中Sheet1的 甲列 相同数值的行对应的乙列的数的和作为Sheet2中丙列中与Sheet1中甲列 相同的行对应的丁列的值...
今天有一同学,喊我帮忙处理EXCEL中数据的问题,题目表述太含糊,简单说,分3步工作: 1)找出SHEET1的"甲列"中相同的行, 2)把相同的行对应的"乙列" ...
- oracle 游标非空,oracle 游标判空步骤
oracle 游标判空方法 create or replace package TAL_TEST is TYPE myCursorType IS REF CURSOR; --测试空游标 PROCEDU ...
- 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 ...
- Oracle游标有何用,Oracle游标使用方法有哪些?
在PL/SQL中依然可以使用UPDATE和DELETE语句更新或删除数据行.显式游标只有在需要获得多行数据的情况下使用.PL/SQL提供了仅仅使用游标就可以执行删除或更新记录的方法. UPDATE或D ...
- 使用oracle 游标修改数据,Oracle 函数施行修改和游标传递
Oracle 函数执行修改和游标传递 ORA-14551:不能在查询语句中执行dml语句,开始误以为函数里不能执行DML或DDL语句,后查到前辈通过采用自治事务解决,在此基础上演例 传递SQL语句对数 ...
- pandas笔记:根据列索引名称/行索引名称 对列重新排序
源数据: import pandas as pd frame=pd.DataFrame(np.arange(12).reshape((4,3)),columns=['c','a','b'],index ...
最新文章
- 技术图文:Python的属性装饰器详解
- C++为什么要内存对齐
- Xilinx 拥抱“新基建” 发力大中华区核心市场
- 微服务很香--麻辣味,但要慢慢消化
- 框架学习与探究之AOP--Castle DynamicProxy
- php中gd为什么是乱码的,php gd库中文乱码怎么解决?
- 形态学运算中腐蚀,膨胀,开运算和闭运算
- 标准IO库fgets和fputs对一个文本文件的读写操作
- 零碎技术栈01_UML画图分析
- 数学基础知识02——常用积分公式
- TOMCAT假死分析
- 商业智慧:创造奇迹的信件
- linux cpu睿频,如何实现CPU单核睿频?
- 宽带服务器无响应678,宽带连接错误678怎么办 是什么原因导致的【解决方法】...
- 如何用excel搭建数据模型,销售数据管理软件
- scons脚本应用笔记
- 【学习笔记】Splay
- Ubuntu18.4设置永久DNS
- esxi突然启动不起来了!显示:Error loading /sb.v00
- M3u8或者ts协议的直播流视频,如何通过加密防止盗链和盗播?