WITH L AS
(SELECT LEVEL AS LV FROM DUAL CONNECT BY LEVEL <= 9 ),
m AS (
SELECT A.LV AS LV_A,
B.LV AS LV_B,
TO_CHAR(B.LV) || 'x' || TO_CHAR(A.LV) || '=' ||
RPAD(TO_CHAR(A.LV * B.LV), 2, ' ') AS TEXT
FROM L A, L B
WHERE b.LV <= a.LV )
SELECT listagg( m.text,' ') WITHIN GROUP (ORDER BY m.lv_b ) AS 九九表
FROM m
GROUP BY m.lv_a
;

列转行 练习题;

 SELECT 部门,nvl(职员,0.00),nvl(推销员,0.00),nvl(董事长,0.00),nvl(总经理,0.00),nvl(分析员,0.00)
FROM (
SELECT
to_char(a.deptno) AS 部门,
MIN(DECODE(a.job,'CLERK',a.avg_sal)) 职员,
MIN(DECODE(a.job,'SALESMAN',a.avg_sal)) 推销员,
MIN(dECODE(a.job,'PRESIDENT',a.avg_sal)) 董事长,
MIN(DECODE(a.job,'MANAGER',a.avg_sal)) 总经理,
MIN(DECODE(a.job,'ANALYST',a.avg_sal)) 分析员
FROM (
SELECT
e.deptno ,
e.job,
ROUND (AVG(sal),5) avg_sal
FROM emp e
GROUP BY e.job,e.deptno
ORDER BY e.deptno
) a
GROUP BY a.deptno
ORDER BY a.deptno
)
UNION ALL
SELECT 部门,nvl(职员,0.00),nvl(推销员,0.00),nvl(董事长,0.00),nvl(总经理,0.00),nvl(分析员,0.00)
FROM(
SELECT
'职位总和' AS 部门,
max(sum(DECODE(job,'CLERK',sal))) AS 职员,
max(sum(DECODE(job,'SALESMAN',sal))) AS 推销员,
max(sum(DECODE(job,'PRESIDENT',sal))) AS 董事长,
max(sum(DECODE(job,'MANAGER',sal))) AS 总经理,
max( sum(DECODE(job,'ANALYST',sal))) AS 分析员
FROM emp
GROUP BY job )
UNION ALL
SELECT 部门,nvl(职员,0.00),nvl(推销员,0.00),nvl(董事长,0.00),nvl(总经理,0.00),nvl(分析员,0.00)
FROM(
SELECT
'平均值' AS 部门,
min(DECODE(job,'CLERK',ROUND (AVG(sal),5))) AS 职员,
min(DECODE(job,'SALESMAN',ROUND (AVG(sal),5))) AS 推销员,
min(DECODE(job,'PRESIDENT',ROUND (AVG(sal),5))) AS 董事长,
min(DECODE(job,'MANAGER',ROUND (AVG(sal),5))) AS 总经理,
min(DECODE(job,'ANALYST',ROUND (AVG(sal),5))) AS 分析员
FROM emp
GROUP BY job );

上例题的简化版 :

 /*
1.先用使用decode()进行行转列查出基础数据作为A表! ; ;
2.B表对A表中的数据进行汇总然后进行合并;
*/
WITH a AS (
SELECT
to_char(deptno) AS deptno ,
SUM(DECODE(job,'ANALYST',sal,0)) AS ANALYST,
SUM(DECODE(job,'CLERK',sal,0)) AS CLERK,
SUM(DECODE(job,'MANAGER',sal,0)) AS MANAGER,
SUM(DECODE(job,'PRESIDENT',sal,0)) AS PRESIDENT,
SUM(DECODE(job,'SALESMAN',sal,0)) AS SALESMAN ,
SUM(sal) AS 总和
FROM scott.EMP
GROUP BY deptno
ORDER BY 1 ),
b AS (
SELECT '总和',
sum(ANALYST),
sum(CLERK),
sum(MANAGER),
sum(PRESIDENT),
sum(SALESMAN) ,
SUM(总和) FROM a )
SELECT * FROM a
UNION ALL
SELECT * FROM b ;

oracle 行转列和列转行的更多相关文章

  1. oracle 行转列、列转行

    最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle  列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...

  2. oracle行转列、列转行、连续日期数字实现方式及mybatis下实现方式

    转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9977591.html 九月份复习,十月份考试,十月底一直没法收心,赶在十一初 由于不可抗拒的原因又不得不重新找 ...

  3. Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

    这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...

  4. [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行

    原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...

  5. Oracle行转列/列转行

    1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual u ...

  6. oracle 行转列~列转行(几种方法)

    工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ...

  7. Oracle行转列,列转行,行列相互转换

    1.行转列 SELECT WM_CONCAT(COLUMN_NAME) COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'T_CREATE_T ...

  8. 做图表统计你需要掌握SQL Server 行转列和列转行

    说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...

  9. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  10. SQLServer处理行转列和列转行

    掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...

随机推荐

  1. 从零开始搭建vue移动端项目到上线的步骤

    初始化项目 1.在安装了node.js的前提下,使用以下命令 npm install --g vue-cli 2.在将要构建项目的目录下 vue init webpack myproject(项目目录 ...

  2. Python图形界面Tk

    最近在学习Python,在使用Tkinter做图形界面时遇到了几个小问题,网上查了一下,在Python2.x导入的是Tkinter,Python3则是tkinter.而且导入的simpledialog ...

  3. 磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题

    原创 标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的 ...

  4. python学习笔记(三):numpy基础

    Counter函数可以对列表中数据进行统计每一个有多少种 most_common(10)可以提取前十位 from collections import Counter a = ['q','q','w' ...

  5. python2.7入门---多线程

        多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹 ...

  6. Java程序设计 第16周 课堂实践

    Java程序设计 第16周 课堂实践 -- 数据库2 课堂实践任务2 查询world数据库,获得人口超过500万的所有城市的列表. 代码分析 实现查询数据库需要我们修改Message.java,Mes ...

  7. 20155306 2006-2007-2 《Java程序设计》第2周学习总结

    20155306 2006-2007-2 <Java程序设计>第2周学习总结 教材学习内容总结 第三章 基础语法: java中,基本类型:布尔(boolean):boolean类型分为tr ...

  8. 20145209 2016-2017-2 《Java程序设计》课程总结

    20145209 2016-2017-2 <Java程序设计>课程总结 每周作业链接汇总 预备作业01 http://www.cnblogs.com/liuyiyang/p/6194319 ...

  9. [arc068E]Snuke Line-[树状数组]

    Description 传送门 Solution 假如想直接YY对于每一个d会有多少种商品满足条件,em反正我搞不定. 然后大佬的题解告诉我说:搞不定?那就不搞它啊,反过来不就得了? 好吧.我们来考虑 ...

  10. cogs2554 [福利]可持久化线段树

    cogs2554 [福利]可持久化线段树 原题链接 每次修改复制一遍就行了... 1A!!! // It is made by XZZ #include<cstdio> #include& ...