zoukankan      html  css  js  c++  java
  • oracle行转列

    针对oracle数据查询的数据,行转列

    1.wm_concat函数:

    例一:

    select c1,c2,wm_concat(c3) from T where.... group by c1,c2

    查询结果自动用“,”分割

    例二:

    select c1,c2,wm_concat(c3)over(partition by ..order by..) from T where.... 

    其中,partition用来分组, order用来排序

    2.sys_connect_by_path函数:

    这个函数使用之前必须先建立一个树,否则无用。sys_connect_by_path(字段名, 2个字段之间的连接符号),注意这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,',')。

    例一:

    select no,p,sys_connect_by_path(a,'--'),level from tmp_a
    start with no = 1
    connect by no - 1 = prior no and p = prior p

    其中:start with 条件1 connect by prior 条件2 条件2可以写多个,用and连接

    例二:

    select C1 , C2 , C3 , ltrim(max(sys_connect_by_path(C4, ',')), ',') from (select row_number() over(partition by C1 ,C2 ,C3 order by C2) r,
    T1.* from T1) start with r = 1 CONNECT by prior r = r - 1 group by C1, C2 , C3

    注:使用前一定要先构造一个树,条件1可以这样写如 子=XX (或父=XX) ;条件2 可以这样写:如果树结构为: 子-->根(倒树) 则为 connect by 子 = prior 根;如果树结构为: 根--> 子(正树) 则 connect 根 = prior 子 

    补充:sys_connect_by_path函数的其他用法,如把一个表的所有列连成一行,用逗号分隔:

    select max(substr(sys_connect_by_path(column_name,','),2))   
    from (select column_name,rownum rn from user_tab_columns where table_name =表名)   
    start with rn=1 connect by rn=rownum

    3.自定义函数

    create or replace function getRow(table1 varchar2 , ptdb1 varchar2) RETURN VARCHAR2 is
    Result VARCHAR2(1000);
    begin
    FOR cur IN (SELECT audit_code FROM sys_audit_column t2 WHERE table1 =
    t2.table_name and ptdb1 = t2.ptdb_name) LOOP
    RESULT := RESULT||cur.audit_code||',';
    END LOOP;
    RESULT:=rtrim(RESULT,',');
    return(Result);
    end getRow;

    调用方法:

    select t.table_name , t.column_name, getRow(t.table_name , t.ptdb_name) from sys_audit_column t
  • 相关阅读:
    Java学习的第五十一天
    Java学习的第五十四天
    Java学习的第五十天
    Java学习的第五十三天
    Java学习的第五十二天
    Java学习的第四十九天
    构造函数
    封 装
    JAVA学习日报 10/8
    JAVA学习日报 10.11
  • 原文地址:https://www.cnblogs.com/iceriver315/p/3708121.html
Copyright © 2011-2022 走看看