欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle使用pivot函数进行大批量数据的动态行转列(代码教程)

程序员文章站 2022-08-09 18:23:29
公司业务要求,需要对一批数据大批量地进行动态行转列之后进行分析,而pivot 函数in中不能使用子查询,有个方法是说可以通过动态sql拼接的方法实现, 在网上找了很久之后没找到具体的方法,就自己去摸...

公司业务要求,需要对一批数据大批量地进行动态行转列之后进行分析,而pivot 函数in中不能使用子查询,有个方法是说可以通过动态sql拼接的方法实现, 在网上找了很久之后没找到具体的方法,就自己去摸索实现了。具体方法如下。

因为需要实现的是动态行转列,所以需要先用wm_concat(distinct())函数单独查出列名,再用dbms_lob.substr()将clob字段转成字符串。然后动态拼接得出的列名来进行查询。建个视图存放查询的结果就可以直接查需要的表啦。具体的代码如下:

procedure p_fxjg as
     
    v_lm         varchar2(2000);
    vs_sql        varchar2(6000); 
    vs_sql1       varchar2(6000);  
  
  begin
  
    vs_sql1 := 'insert into ls_temp select  dbms_lob.substr(wm_concat(distinct(sf)))  from b_clb  a  ';
    execute immediate vs_sql1;
  
    
    select sfbm into v_lm from ls_temp; 
  
    vs_sql := 'create or replace view v_fxjg as select *  from (select a.yh, a.mc, a.lx "bz", a.sf, a.jg from  b_clb a  )  pivot(sum(jg) for sf in(' ||
              v_lm || '))';
    execute immediate vs_sql; 
    
  end;