文档章节

oracle sql 行列转换

南栀安
 南栀安
发布于 2017/06/28 18:07
字数 478
阅读 2
收藏 0

一.建表语句

 create table kecheng
 (
   id     NUMBER,
    name   VARCHAR2(20),
    course VARCHAR2(20),
    score  NUMBER
  );
  insert into kecheng (id, name, course, score)
  values (1, '张三', '语文', 67);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '数学', 76);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '英语', 43);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '历史', 56);
 insert into kecheng (id, name, course, score)
 values (1, '张三', '化学', 11);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '语文', 54);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '数学', 81);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '英语', 64);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '历史', 93);
 insert into kecheng (id, name, course, score)
 values (2, '李四', '化学', 27);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '语文', 24);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '数学', 25);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '英语', 8);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '历史', 45);
 insert into kecheng (id, name, course, score)
 values (3, '王五', '化学', 1);
 commit;

二、固定行转成列

2.1 decode方法

SELECT id, NAME, 
       SUM(decode(course, '语文', score, 0)) 语文,--这里使用max,min都可以
       SUM(decode(course, '数学', score, 0)) 数学, 
       SUM(decode(course, '英语', score, 0)) 英语,
       SUM(decode(course, '历史', score, 0)) 历史, 
       SUM(decode(course, '化学', score, 0)) 化学
	FROM kecheng
 GROUP BY id, NAME;

 

2.2 case when

SELECT ID,NAME,
MAX(CASE WHEN course='语文' THEN score ELSE 0 END) 语文,
MAX(CASE WHEN course='数学' THEN score ELSE 0 END) 数学,
MAX(CASE WHEN course='英语' THEN score ELSE 0 END) 英语,
MAX(CASE WHEN course='历史' THEN score ELSE 0 END) 历史,
MAX(CASE WHEN course='化学' THEN score ELSE 0 END) 化学
FROM kecheng
GROUP BY ID ,NAME

 

三、动态转换行列

DECLARE
  --存放最终的SQL
  LV_SQL VARCHAR2(3000);
  --存放连接的SQL
  SQL_COMMOND VARCHAR2(3000);
  --定义游标
  CURSOR CUR IS
    SELECT COURSE FROM KECHENG GROUP BY COURSE;
BEGIN
  --定义查询开头
  SQL_COMMOND := 'SELECT NAME ';

  FOR I IN CUR LOOP
    --将结果相连接
    SQL_COMMOND := SQL_COMMOND || ' ,SUM(DECODE(course,''' || I.COURSE ||
                   ''',score,0)) ' || I.COURSE;
    DBMS_OUTPUT.PUT_LINE(SQL_COMMOND);
  END LOOP;
  SQL_COMMOND := SQL_COMMOND || ' from KECHENG group by name';
  LV_SQL      := 'INSERT INTO temp_ss  ' || SQL_COMMOND;
  DBMS_OUTPUT.PUT_LINE(LV_SQL);
  EXECUTE IMMEDIATE LV_SQL;
END;

本文转载自:http://www.cnblogs.com/liunanjava/p/4961923.html

共有 人打赏支持
南栀安
粉丝 1
博文 20
码字总数 5177
作品 0
绍兴
Oracle学习之路-- 案例分析实现行列转换的几种方式

注:本文使用的数据库表为oracle自带scott用户下的emp,dept等表结构.     通过一个例子来说明行列转换: 需求:查询每个部门中各个职位的总工资     按我们最原始的思路可能会这么写:  ...

冬至饮雪
2016/07/11
0
0
Oracle 行列转换的一道微软面试题

昨天 fannairu 给的一个微软面试题, 写 SQL 来实现功能, 里面涉及到行列转换, 这算是 SQL 里一个比较好玩的功能了, 特将解题的思路记录下来. 题目: 现在一个商品销售表 sale , 表结构如下 想...

sailtseng
2012/06/20
0
0
11g中利用listagg函数实现自动拼接INSERT语句

本来今天想继续写另一篇外传,但总是熬这么晚不是个事儿,况且今儿北京又输了,恨铁不成钢,堵得慌。。。 白天工作忙,晚上看娃睡了之后才有一些时间可以随便写一些,总结一下,记录一下,算...

bisal
2016/12/29
0
0
罗海雄:仅仅使用AWR做报告? 性能优化还未入门(含PPT)

AWR相信DBA们都不陌生。Automatic Workload Repository,自动负载信息库,就是Oracle把数据库中比较重要的性能视图里的信息,定期从内存保存到数据库里面。默认情况下,Oracle 会每个一个小时...

技术小能手
05/23
0
0
oracle 行列转换逻辑

该需求涉及到两个知识点:1、分析函数;2、行列转换。 先讲实现 第一步:建测试表 SQL code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 第二步:对表进行分组,组内编号1,2,3 SQL code ? 1 第三步:...

李狗蛋丶
2016/11/05
2
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
7
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部