Oracle 简单的列转行
需求是,统计每一个部门不同工种的薪水总和。
SQL> select deptno,ename,job,sal from emp;
DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
20 SMITH CLERK 800
30 ALLEN SALESMAN 1600
30 WARD SALESMAN 1250
20 JONES MANAGER 2975
30 MARTIN SALESMAN 1250
30 BLAKE MANAGER 2850
10 CLARK MANAGER 2450
20 SCOTT ANALYST 3000
10 KING PRESIDENT 5000
30 TURNER SALESMAN 1500
20 ADAMS CLERK 1100
30 JAMES CLERK 950
20 FORD ANALYST 3000
10 MILLER CLERK 1300
已选择14行。
SQL> select deptno,
nvl(sum(decode(job, 'MANAGER', sal)), 0) "s_MANAGER",
nvl(sum(decode(job, 'ANALYST', sal)), 0) "s_ANALYST",
nvl(sum(decode(job, 'CLERK', sal)), 0) "s_CLERK",
nvl(sum(decode(job, 'PRESIDENT', sal)), 0) "s_PRESIDENT",
nvl(sum(decode(job, 'SALESMAN', sal)), 0) "s_SALESMAN"
from emp
group by deptno;
DEPTNO s_MANAGER s_ANALYST s_CLERK s_PRESIDENT s_SALESMAN
---------- ---------- ---------- ---------- ----------- ----------
30 2850 0 950 0 5600
20 2975 6000 1900 0 0
10 2450 0 1300 5000 0
SQL> select deptno,
nvl(sum(case job when 'MANAGER' then sal else null end), 0) "s_MANAGER",
nvl(sum(case job when 'ANALYST' then sal else null end), 0) "s_ANALYST",
nvl(sum(case job when 'CLERK' then sal else null end), 0) "s_CLERK",
nvl(sum(case job when 'PRESIDENT' then sal else null end), 0) "s_PRESIDENT",
nvl(sum(case job when 'SALESMAN' then sal else null end), 0) "s_SALESMAN"
from emp
group by deptno;
DEPTNO s_MANAGER s_ANALYST s_CLERK s_PRESIDENT s_SALESMAN
---------- ---------- ---------- ---------- ----------- ----------
30 2850 0 950 0 5600
20 2975 6000 1900 0 0
10 2450 0 1300 5000 0
需求是查询每一个部门下的人员信息,在一行显示。在oracle 10g和11g上能够用WMSYS.WM_CONCAT,但值得注意的是此函数是undocument的函数(不是官方发布的函数),oracle不保证升级之后还会存在。
SQL> SELECT deptno, WMSYS.WM_CONCAT(ename) AS employees FROM emp GROUPBY deptno;
DEPTNO EMPLOYEES
---------- --------------------------------------
10 CLARK,MILLER,KING
20 SMITH,FORD,ADAMS,SCOTT,JONES
30ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD
Oracle 11g后,能够用listagg实现。
SQL> SELECT deptno, LISTAGG(ename, ',') WITHIN
GROUP( ORDER BY ename) AS employees
FROM emp
GROUP BY deptno;
DEPTNO EMPLOYEES
---------- ---------------------------------------
10 CLARK,KING,MILLER
20ADAMS,FORD,JONES,SCOTT,SMITH
30ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
Oracle 简单的列转行的更多相关文章
- Oracle 四种列转行的方法
1. Oracle自带列转行函数listagg: 实例: with temp as( select 'China' nation ,'Guangzhou' city from dual union a ...
- Oracle中的列转行实现字段拼接用例
文章目录 Oracle中的列转行实现字段拼接 场景 在SQL使用过程中经常有这种需求:将某列字段拼接成in('XX','XX','XX','XX','XX','XX' ...)做为查询条件. 实现 s ...
- Oracle中的列转行例子详解
数据如下:name id张三 1,2,3 要求实现:name id张三 1张三 2张三 3 --创建临时表 create table tmp as(select '张三' name, '1,2,3' ...
- Oracle wm_concat(列转行函数)实际使用
接触到了一个开发需求.其中是要把NC单据表体行的字段拼成一个字符串.例如: id name work age 1 王一 搬运工 20 2 李二 清洁工 21 3 张三 洗脚工 22 出现结果字符串为: ...
- oracle wm_concat函数 列转行 分组函数
(1)select mark, wm_concat(status) from DISSENT_INFO t GROUP BY mark; 查出来的数据 mark status 222 ...
- Oracle行转列、列转行的Sql语句总结
多行转字符串 这个比较简单,用||或concat函数可以实现 SQL Code 12 select concat(id,username) str from app_userselect i ...
- Oracle行转列、列转行的Sql语句总结(转)
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str f ...
- oracle 行转列、列转行
最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle 列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...
- oracle中行转列、列转行函数
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...
随机推荐
- CF817C Really Big Numbers
思路: 二分. 实现: #include <iostream> #include <cstdio> using namespace std; typedef long long ...
- Pro ASP.NET Core MVC 第6版 第一章
目录 第一章 ASP.NET Core MVC 的前世今生 ASP.NET Core MVC 是一个微软公司开发的Web应用程序开发框架,它结合了MVC架构的高效性和简洁性,敏捷开发的思想和技术和.N ...
- ajax的底层前后台交互
为什么用ajax或者它的优点: 异步加载数据,无需切换页面 更加的用户体验,局部刷新,及时验证,操作步骤简化: 节省流量 js控制数据的加载,更加灵活多用. 底层就是XMLHttpRequest对象: ...
- LDA主题模型(理解篇)
何谓“主题”呢?望文生义就知道是什么意思了,就是诸如一篇文章.一段话.一个句子所表达的中心思想.不过从统计模型的角度来说, 我们是用一个特定的词频分布来刻画主题的,并认为一篇文章.一段话.一个句子是从 ...
- if语句,while语句,do whlie语句,循环语句
总结: 1.定义数组并赋值: var arr=[1,2,3,4]; 2.通过下标访问数组: var str=arr[0]; 3.自定义数组 var arr=new Array(); 4.数组的赋值 a ...
- nginx+keepalived+tomcat+memcache实现双VIP高可用及Session会话保持
Nginx+Keepalived+Tomcat+Memcached 实现双VIP负载均衡及Session会话保持 IP 信息列表: 名称 IP ...
- 总结struts2 iterator status的用法
1:#status.odd 是否奇数行 2:#status.count 当前行数 3:#status.index 当前行的序号,从0开始『#status.count=#status.index+1』 ...
- <MyBatis>入门二 全局配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...
- Ztree加载完成默认选中根节点右侧生成表格
需求:页面加载完成之后,默认选中ztree的根节点,并执行其点击方法,右侧生成表格: 效果:如下图所示: 思路:在节点点击事件clickNode方法中根据节点的部门code查询这个部门下的所有员工,并 ...
- virtualenv与virtualenvwrapper
一.Linux下安装.配置virtualenv pip3 install virtualenv # 创建虚拟环境env1 virtualenv env1 --no-site-packages --py ...