Oracle自定义行转列函数

--行转列自定义函数,只针对TABLE1表
--paramType是参数类型,用于判断,param1和param2是条件参数
create or replace function My_concat(paramType in integer,param1 in varchar2,param2 in varchar2) return varchar2
is
    resultStr varchar2(2000);
begin
    if paramType = 1 then
        --定义游标
        for temp_cursor1 in (select CONTA_ID FROM TABLE1 WHERE FORM_ID=param1 and orderType=param2)
        loop
            resultStr:=resultStr||temp_cursor1.CONTA_ID||‘,‘;
        end loop;

    elsif paramType = 2 then
        for temp_cursor2 in (select CONTA_TYPE FROM TABLE1 WHERE FORM_ID=param1 and orderType=param2)
        loop
            resultStr:=resultStr||temp_cursor2.CONTA_TYPE||‘,‘;
        end loop;

    elsif paramType = 3 then
        for temp_cursor3 in (select CONTA_WEIGHT FROM TABLE1 WHERE FORM_ID=param1 and orderType=param2)
        loop
            resultStr:=resultStr||temp_cursor3.CONTA_WEIGHT||‘,‘;
        end loop;

    end if;

    resultStr:=rtrim(resultStr,‘,‘);
    return resultStr;

end;

--执行例子:
select A.COLUMN1,A.COLUMN2,A.COLUMN3
       My_concat(1,A.COOLUMN1,A.COLUMN2) AS CONTA_IDS,
       My_concat(2,A.COOLUMN1,A.COLUMN2) AS CONTA_TYPES,
       My_concat(3,A.COOLUMN1,A.COLUMN2) AS CONTA_WEIGHTS
from TABLE1 AS B LEFT JOIN TABLE2 A
ON A.COOLUMN1=B.FORM_ID AND A.COLUMN2=B.orderType

结果如下图:

时间: 2024-08-03 06:28:49

Oracle自定义行转列函数的相关文章

Oracle中“行转列”的实现方式

在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 12/17/1980 800.00 20 7499 ALLEN SALESMAN 7698 2/20/1981 1600.00 300.00 30 7521 WARD SALESMAN

Oracle中"行转列"的实现方式

在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用"行转列": scott的emp的原始数据为: 使用 "行转列" 统计各职位的人员在各部门的分布人数后,数据为: 一.经典的实现方式 主要是利用decode函数.聚合函数(如max.sum等).group by分组实现的 select t.job, count(decode(t.deptno, '10', 1)) as "10

oracle的行转列和列转行

1.行转列: 一.最初的数据: 转换之后的数据: 二.转换的语句: --统计各职位的人员在各部门的分布人数:SELECT T.JOB, SUM(DECODE(T.JOB, 'CLERK', 1, NULL)) AS COUNT1 , SUM(DECODE(T.JOB, 'SALESMAN', 1, NULL)) AS COUNT2 , SUM(DECODE(T.JOB, 'PRESIDENT', 1, NULL)) AS COUNT3 , SUM(DECODE(T.JOB, 'MANAGER',

PIVOT:行转列函数

PIVOT函数,行转列 PIVOT函数的格式如下: PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N]))<聚合函数>就是我们使用的SUM,COUNT,AVG等Sql聚合函数,也就是行转列后计算列的聚合方式.[聚合列值]要进行聚合的列名[行转列前的列名]这个就是需要将行转换为列的列名.[行转列后的列名]这里需要声明将行的值转换为列后的列名,因为转换后的列名其

Oracle数据 行转列

记录一段行转列SQL代码: select cs.standard_id,cs.area_code,cs.exu_dept, regexp_substr(exu_dept, '[^,]+', 1, level) as dept_id from ca_stand_exu_dept cs connect by id = prior id and instr(exu_dept||',', ',', 1, level) > 0 and prior dbms_random.value is not null

Oracle行转列函数由wmsys.wm_concat到listagg的进化

测试表数据 select * from test01 ID    NAME 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 1.wmsys.wm_concat用法(在10g下) 这个函数很常见,但Oracle官方

oracle行转列函数

GreenPlum之数组合并取交集及行变列、列变行函数

--1.利用INTERSECT关键字数组之间交集函数 CREATE OR REPLACE FUNCTION array_intersect(anyarray, anyarray) RETURNS anyarray AS $$ SELECT ARRAY( SELECT UNNEST($1) INTERSECT SELECT UNNEST($2)); $$ LANGUAGE SQL; select array_intersect(array[1,2,3],array[2,3,4]); --2.行变列

Oracle多行记录合并的几种方法

今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default Comments ------- ------------ -------- ------- -------- COUNTRY VARCHAR2(20) Y CITY VARCHAR2(20) Y SQL> select * from test; COUNTRY CITY ---