oracle 行转列和列转行
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 行转列和列转行的更多相关文章
- oracle 行转列、列转行
最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle 列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...
- oracle行转列、列转行、连续日期数字实现方式及mybatis下实现方式
转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9977591.html 九月份复习,十月份考试,十月底一直没法收心,赶在十一初 由于不可抗拒的原因又不得不重新找 ...
- Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from ap ...
- [转]Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.P ...
- Oracle行转列/列转行
1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual u ...
- oracle 行转列~列转行(几种方法)
工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ...
- Oracle行转列,列转行,行列相互转换
1.行转列 SELECT WM_CONCAT(COLUMN_NAME) COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'T_CREATE_T ...
- 做图表统计你需要掌握SQL Server 行转列和列转行
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- SQLServer处理行转列和列转行
掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...
随机推荐
- python paramiko模块和多线程讲解
1.paramiko 实现ssh 登录 import paramiko # 实现ssh登录 ssh_client = paramiko.SSHClient() ssh_client.set_missi ...
- String in Java
- #define定义数据溢出的问题
使用合泰单片机做一个小东西,使用 #define TIMER_COUNT (30*60*1000) 时,发现结果老是不对,后来想想,是不是数据溢出了,一查果然是这样.看来是stm32用多了,总以为#d ...
- python习题20190130
#encoding=utf-8 ''' 一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣,如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格, ...
- java入门---修饰符&访问修饰符&非访问修饰符
Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class ...
- 20155216 实验二 Java面向对象程序设计
实验二:Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD. 2.理解并掌握面向对象的三要素:封装.继承.多态. 3.初步掌握UML建模. 4.熟悉S.O.L.I.D原则. 5.了解设计 ...
- 20155321 2016-2017-2《Java程序设计》课堂实践项目
20155321 2016-2017-2<Java程序设计>课堂实践项目 关于String类 split方法 charAt方法 项目题目: 模拟实现Linux下Sort -t : -k 2 ...
- STM32的备份寄存器测试
1. 研究STM3的备份寄存器,注意,如果要测试这个例程的话,VBAT不能和VDD接一起,必须分开. 2. 理解,备份寄存器可以有VBAT独立供电,也就是外接电池,备份寄存器在VBAT供电情况下,如果 ...
- TW实习日记:第九天
这两天有点忙,要改前端网页和加需求上去.所以昨天说的Vue缓存机制也没看,所以打算现在列个挖了的坑的清单: Vue缓存机制.生命周期和钩子函数 使用项目组自用组件来重写静态页面 SSM框架搭建.整合流 ...
- 修改Linux系统下的最大文件描述符限制
通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下: $ulimit -n1024 当然可以通过ulimit -SHn 1024 ...