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

2018-02-03 10:23:37来源:网络收集作者:咖啡不加糖人点击

分享

     请勿转载,如需转载需留言说明!


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


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


PROCEDURE P_FXJG ASv_LMVARCHAR2(2000);
vs_sql varchar2(6000);
vs_sql1varchar2(6000);
BEGIN
vs_sql1 := 'INSERT INTO LS_TEMP selectdbms_lob.substr(wm_concat(distinct(sf)))from B_CLBa';
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 fromB_CLB a)pivot(sum(JG) for SF in(' ||
V_LM || '))';
execute immediate vs_sql;
END;

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台