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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM