oracle 使用pivot 函数进行批量数据的动态行转列

Posted my-fishking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 使用pivot 函数进行批量数据的动态行转列相关的知识,希望对你有一定的参考价值。

公司业务要求,需要对一批数据大批量地进行动态行转列之后进行分析,而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;

 

以上是关于oracle 使用pivot 函数进行批量数据的动态行转列的主要内容,如果未能解决你的问题,请参考以下文章

oracle行转列sql怎么写?

使用 PIVOT 函数的行到列 (Oracle)

oracle pivot 和 unpivot 函数的使用

Oracle SQL Developer:如何使用 PIVOT 函数将行转置为列

⭐️ LeetCode解题系列 ⭐️ 1179. 重新格式化部门表(Oracle Pivot 行转列函数)

⭐️ LeetCode解题系列 ⭐️ 1179. 重新格式化部门表(Oracle Pivot 行转列函数)