oracle 函数 实现行转列
来源:互联网 发布:平稳时间序列数据下载 编辑:程序博客网 时间:2024/06/06 02:13
oracle 函数实现行转列(多行转成一列)
二次修正时间:20170117新增内容:增加另一种方法
需求
列出雇员表中同属一个部门的雇员名称和部门号
select t.DEPTNO 部门号, t.NAME 姓名 from employee t;
结果
部门号 姓名 10 CLARK 10 KING 10 MILLER 20 ADAMS 20 FORD 20 JONES 20 SCOTT 20 SMITH 30 ALLEN 30 BLAKE 30 JAMES 30 MARTIN 30 TURNER 30 WARD
借助oracle提供的wmsys.wm_concat()函数,可以方便的实现归并同一组的数据,看一下用法
方法一
select t.DEPTNO 部门号, WMSYS.WM_CONCAT(t.NAME) 姓名 From employee GROUP BY t.DEPTNO;
实现结果
部门号 姓名 10 CLARK, KING, MILLER 20 ADAMS, FORD, JONES, SCOTT, SMITH 30 ALLEN, BLAKE, JAMES, MARTIN, TURNER, WARD
方法二
LISTAGG函数由11gr2引入,使得字符串聚合操作更加容易。并且允许我们制定排序规则。
使用方法如下
SELECT ORG_ID,LISTAGG(ORG_NAME,',') WITHIN GROUP (ORDER BY ORG_NAME) AS "机构名称"FROM(SELECT '000000' ORG_ID,'小青菜' ORG_NAME,1 ORG_LEVEL FROM DUAL UNION ALLSELECT '000000','小白',3 FROM DUAL UNION ALLSELECT '000000','鼠',2 FROM DUAL )GROUP BY ORG_ID;
结果
ORG_ID 机构名称000000 小白,小青菜,鼠
注意看一下,中间有一个order by 排序,现在改变一下排序字段
SELECT ORG_ID,LISTAGG(ORG_NAME,',') WITHIN GROUP (ORDER BY ORG_LEVEL)FROM(SELECT '000000' ORG_ID,'小青菜' ORG_NAME,1 ORG_LEVEL FROM DUAL UNION ALLSELECT '000000','小白',3 FROM DUAL UNION ALLSELECT '000000','鼠',2 FROM DUAL )GROUP BY ORG_ID;
结果
ORG_ID 机构名称000000 小青菜,鼠,小白
其实还有很多种方法,我这里贴出地址,仅供大家研究
http://www.2cto.com/database/201501/369045.html
0 0
- oracle 函数 实现行转列
- Oracle 11g Pivot函数实现行转列
- oracle数据库 行转列 用decode函数实现
- Oracle 实现split函数
- oracle实现split函数
- Oracle实现split函数
- oracle实现split函数
- oracle nupivot函数实现行转列和pivot实现列转行
- Oracle实现split函数2
- oracle实现字符串分割函数 split()函数
- sql server 2005或2008实现oracle行转列函数wm_concat
- Oracle 11g使用Pivot函数实现数据聚合行转列
- Oracle的行转列的函数wm_concat的db2实现
- Oracle SQL函数pivot、unpivot转置函数实现行转列、列转行
- Oracle 实现 split 函数 (返回数组)
- 利用函数实现的oracle行列转换
- oracle用sum函数实现累加
- oracle实现用函数返回表集合
- java无法转化时间问题
- [LVS] 负载均衡的方式和选择
- 欢迎使用CSDN-markdown编辑器
- Java Web day(6)之jsp&Cookie&HttpSession基础
- 学习笔记——IOC
- oracle 函数 实现行转列
- ARM命名规则
- java 向HTTPS地址发送POST请求
- 最新PHP获取客户端浏览以及操作系统信息
- 第十章 用javascript实现动画效果
- linux客户端打印报表时操作系统的配置
- 将本地文件上传到远程FTP服务器和从远程FTP服务器下载文件到本地
- RamDisk
- tomcat文档列表