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. 嵌入式Linux系统移植——uboot常用命令

    flash的一般分区: 其它数据 环境变量 可执行程序.如bootloader print(可缩写为:pri):打印查看uboot这个软件中集成的环境变量setenv.saveenv:设置.保存环境变 ...

  2. ASP.NET底层与各个组件的初步认识与理解 (转载)

    ASP.NET底层的初步认识与理解   最近在国外的网站乱走一通,发现一些比较好的文章,收集整理加于自己的理解,作为笔记形式记录下来,让以后自己有个回忆. ASP.NET是一个非常强大的构建Web应用 ...

  3. 20155211实验2 Windows口令破解

    20155211实验2 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和 ...

  4. 20155227 2016-2017-2 《Java程序设计》第二周学习总结

    20155227 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 本周学习的第三章内容与以前学过的C语言有很多共通的地方,学习起来还是比较快的. 主要的内容有 ...

  5. 20155235 2016-2017-2 《Java程序设计》第9周学习总结

    20155235 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 JDBC简介 连接数据库 使用Statement.Res ...

  6. 课上实践练习——MySort

    模拟实现Linux下Sort -t : -k 2的功能.参考 Sort的实现.提交码云链接和代码运行截图. Linux下Sort -t : -k 2的功能 sort的工作原理: sort将文件的每一行 ...

  7. BZOJ1208_宠物收养所_KEY

    题目传送门 平衡树的题. 因为题目给出条件(其实自己也知道):同一时间呆在收养所中的,要么全是宠物,要么全是领养者,这些宠物和领养者的个数不会超过10000个. 所以只要维护一颗平衡树,它的里面要不全 ...

  8. window + office 激活方法(不提供下载)

    下载KMSTools工具,里面集成了许多激活方法. WINDOWS KMS激活方式 比较简单,随便点一个KMSTools带有KMS字样的工具就可以了,但是KMS激活方式有效期为180天,到期需要继续激 ...

  9. Qt-QML-Canvas写个小小的闹钟

    先看下演示效果 大致过程 先绘制仪表盘,圆圈和刻度 剩下再绘制三个指针 最后在绘制上面的电子时钟 下面写源代码 import QtQuick 2.0 Rectangle { id:root ancho ...

  10. Selenium2+python自动化-操作浏览器基本方法

    前言 从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是webdriver框架的A ...