oracle 函数 实现行转列

    xiaoxiao2021-12-14  17

    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 ALL SELECT '000000','小白',3 FROM DUAL UNION ALL SELECT '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 ALL SELECT '000000','小白',3 FROM DUAL UNION ALL SELECT '000000','鼠',2 FROM DUAL ) GROUP BY ORG_ID;

    结果

    ORG_ID 机构名称 000000 小青菜,鼠,小白

    其实还有很多种方法,我这里贴出地址,仅供大家研究

    http://www.2cto.com/database/201501/369045.html
    转载请注明原文地址: https://ju.6miu.com/read-963913.html

    最新回复(0)