可以根据前台导入数据库的最多200列数据,根据第一行标题将数据转置成竖版:

 时间

 区县

指标名称1

指标名称2

指标名称3

指标名称4

指标名称5

指标名称6

指标名称7

指标名称8

201901

区县1

92

91

82

42

66

60

7

23

201901

区县2

29

12

4

75

19

50

12

82

201901

区县3

46

86

69

2

81

40

18

12

201901

区县4

18

6

11

91

76

90

74

2

201901

区县5

80

71

75

51

32

6

36

38

201901

区县6

34

25

50

64

37

47

28

56

201901

区县7

37

53

85

72

26

81

98

42

201901

区县8

77

47

35

97

83

51

44

93

201901

区县9

7

75

22

38

29

37

79

71

 

 

 

 

 

 

 

 

 

 

会统一转置为这样

指标名

月份

区县

数值

排名

指标名称1

201901

区县1

4

1

指标名称1

201901

区县2

34

2

指标名称1

201901

区县3

95

3

指标名称1

201901

区县4

91

4

指标名称1

201901

区县5

67

5

指标名称1

201901

区县6

60

6

指标名称1

201901

区县7

72

7

指标名称1

201901

区县8

19

8

指标名称1

201901

区县9

33

9

代码如下:

create or replace procedure biller533.shzc_202106_cwbb_jf_drhangd_mx
(p_userid varchar2,p_rq varchar2, p_cursor in out Results.ref_cursor_type)
as

v_rq              VARCHAR2(80);
v_sqd              VARCHAR2(80);
v_zbpm              VARCHAR2(80);
v_sql             VARCHAR2(30000);
v_hd             VARCHAR2(100);
SQL_STRING  VARCHAR2(6000);

  SQLSTMT0 VARCHAR2(32760);
  SQLSTMT1 VARCHAR2(32760);

  V_ZMLX   VARCHAR2(20);
  V_ZMLX_SZ   VARCHAR2(20);
   v_zdyf              varchar2(10);
   v_zdyf_next    varchar2(10);
   v_zdyf_d         date;
   
   v_zdyf_qn       varchar2(10); ---去年

begin

   v_rq := substr( to_char(sysdate,'yyyymmdd'),1,6);

    v_zdyf_d:=to_date(v_rq,'yyyymm'); ---转成月日期
    v_zdyf_qn:=to_char(add_months(v_zdyf_d,-12),'yyyymm'); ---转成去年字符 
    v_zdyf:=to_char(add_months(v_zdyf_d,-1),'yyyymmdd');
    v_zdyf_next:=to_char(add_months(v_zdyf_d,1),'yyyymmdd');
   
   ----基础数据——行固定
   
   
   zhyw.fan_drop_retable(upper('cwbb_jfbbdr_hang_drcc_sx'),'SHZC');
      SQL_STRING := 'create  table  SHZC.cwbb_jfbbdr_hang_drcc_sx as 
       select * from  shzc.cwbb_jfbbdr_hang_drcc a 
        where nvl(a.经营单位,''全市排名'') <>''全市排名'' 
        AND nvl(a.月份,''时间'' )<>''时间'' ' ;
      execute immediate (SQL_STRING);
      
      
   
   ----先提取表格字段名
      zhyw.fan_drop_retable(upper('cwbb_jfbbdr_hang_yue_sx'),'SHZC');
      SQL_STRING := 'create  table  SHZC.cwbb_jfbbdr_hang_yue_sx as 
      select a.COLUMN_NAME from 
      (select a.COLUMN_NAME from ALL_TAB_COLUMNS a 
      where a.TABLE_NAME =upper(''cwbb_jfbbdr_hang_drcc'')
      and a.OWNER=''SHZC'' and a.COLUMN_ID>=3 
      and a.COLUMN_NAME not in (''USER_ID'',''IN_TIME'',''排名'')
      order by a.COLUMN_ID ) a  ' ;
      execute immediate (SQL_STRING);
      
      ----先提取表格字段  编码 对应数据
      
      zhyw.fan_drop_retable(upper('cwbb_jfbbdr_hang_yue_sxa'),'SHZC');
      SQL_STRING := 'create  table  SHZC.cwbb_jfbbdr_hang_yue_sxa as 
      select 字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8,字段9,字段10,字段11,
      字段12,字段13,字段14,字段15,字段16,字段17,字段18,字段19,字段20,字段21,字段22,
      字段23,字段24,字段25,字段26,字段27,字段28,字段29,字段30,字段31,字段32,字段33,
      字段34,字段35,字段36,字段37,字段38,字段39,字段40,字段41,字段42,字段43,字段44,
      字段45,字段46,字段47,字段48,字段49,字段50,字段51,字段52,字段53,字段54,字段55,
      字段56,字段57,字段58,字段59,字段60,字段61,字段62,字段63,字段64,字段65,字段66,
      字段67,字段68,字段69,字段70,字段71,字段72,字段73,字段74,字段75,字段76,字段77,
      字段78,字段79,字段80,字段81,字段82,字段83,字段84,字段85,字段86,字段87,字段88,
      字段89,字段90,字段91,字段92,字段93,字段94,字段95,字段96,字段97,字段98,字段99,
      字段100,字段101,字段102,字段103,字段104,字段105,字段106,字段107,字段108,字段109,
      字段110,字段111,字段112,字段113,字段114,字段115,字段116,字段117,字段118,字段119,
      字段120,字段121,字段122,字段123,字段124,字段125,字段126,字段127,字段128,字段129,
      字段130,字段131,字段132,字段133,字段134,字段135,字段136,字段137,字段138,字段139,
      字段140,字段141,字段142,字段143,字段144,字段145,字段146,字段147,字段148,字段149,
      字段150,字段151,字段152,字段153,字段154,字段155,字段156,字段157,字段158,字段159,
      字段160,字段161,字段162,字段163,字段164,字段165,字段166,字段167,字段168,字段169,
      字段170,字段171,字段172,字段173,字段174,字段175,字段176,字段177,字段178,字段179,
      字段180,字段181,字段182,字段183,字段184,字段185,字段186,字段187,字段188,字段189,
      字段190,字段191,字段192,字段193,字段194,字段195,字段196,字段197,字段198,字段199,字段200
       from shzc.cwbb_jfbbdr_hang_drcc a 
       where a.月份=''时间'' ' ;
       execute immediate (SQL_STRING);
       
       zhyw.fan_drop_retable('SHZC_JFBB_QXMC_HANG_ZD','SHZC');
      DECLARE
       CURSOR ZMLX IS  
       select  COLUMN_NAME from SHZC.cwbb_jfbbdr_hang_yue_sx  ; 
    BEGIN
      OPEN ZMLX;
       SQLSTMT0 := 'create table SHZC.SHZC_JFBB_QXMC_HANG_ZD 
       storage (initial 8m next 3m pctincrease 0) as
                  ';
      LOOP
        FETCH ZMLX INTO V_ZMLX;
        EXIT WHEN ZMLX%NOTFOUND;

        SQLSTMT0 := SQLSTMT0 || 'select '''||V_ZMLX ||''' 字段名,
        max( nvl(a.'||V_ZMLX ||',''0'')) 字段指标
        from shzc.cwbb_jfbbdr_hang_yue_sxa a 
        where rownum=1
        UNION ALL ';                                                              
        END LOOP;
        SQLSTMT0 := SQLSTMT0 || ' ';
        
      --语句截取组成完整语句
      SQLSTMT1 := SUBSTR(SQLSTMT0 , 1 , length( SQLSTMT0 )-11) ;
      
      EXECUTE IMMEDIATE (SQLSTMT1);
     end;
       
       
       
       
       -------字段名数据
   
      zhyw.fan_drop_retable('SHZC_JFBB_QXMC_HANG','SHZC');
      DECLARE
       CURSOR ZMLX IS  
       select  字段名 from SHZC.SHZC_JFBB_QXMC_HANG_ZD a where a.字段指标 <>'0'  ; 
    BEGIN
      OPEN ZMLX;
       SQLSTMT0 := 'create table SHZC.SHZC_JFBB_QXMC_HANG 
       storage (initial 8m next 3m pctincrease 0) as
                  ';
      LOOP
        FETCH ZMLX INTO V_ZMLX;
        EXIT WHEN ZMLX%NOTFOUND;

        SQLSTMT0 := SQLSTMT0 || 'select A.月份,a.经营单位 区县,'''||V_ZMLX ||''' 字段名,
        max( nvl(a.'||V_ZMLX ||',''0'')) 指标
        from shzc.cwbb_jfbbdr_hang_drcc_sx a 
        group by A.月份,A.经营单位
        UNION ALL ';                                                              
        END LOOP;
        SQLSTMT0 := SQLSTMT0 || ' ';
        
      --语句截取组成完整语句
      SQLSTMT1 := SUBSTR(SQLSTMT0 , 1 , length( SQLSTMT0 )-11) ;
      
      EXECUTE IMMEDIATE (SQLSTMT1);
     end;
      
      
      ------全市排名数据
      
      zhyw.fan_drop_retable(upper('cwbb_jfbbdr_hang_drcc_pm'),'SHZC');
      SQL_STRING := 'create  table  SHZC.cwbb_jfbbdr_hang_drcc_pm as 
         select * from  shzc.cwbb_jfbbdr_hang_drcc a 
        where nvl(a.经营单位,''全市'') =''全市排名''  ' ;
      execute immediate (SQL_STRING);
      
      zhyw.fan_drop_retable('SHZC_JFBB_QXMC_HANG_PM','SHZC');
      DECLARE
       CURSOR ZMLX IS  
       select  字段名 from SHZC.SHZC_JFBB_QXMC_HANG_ZD a where a.字段指标 <>'0'   ; 
    BEGIN
      OPEN ZMLX;
       SQLSTMT0 := 'create table SHZC.SHZC_JFBB_QXMC_HANG_PM 
       storage (initial 8m next 3m pctincrease 0) as
                  ';
      LOOP
        FETCH ZMLX INTO V_ZMLX;
        EXIT WHEN ZMLX%NOTFOUND;

        SQLSTMT0 := SQLSTMT0 || 'select substr(a.经营单位,1,2) 区县,a.月份, '''||V_ZMLX ||''' 字段名,
        max( to_number(nvl(a.'||V_ZMLX ||',''0''))) 排名
        from shzc.cwbb_jfbbdr_hang_drcc_pm a 
        group by substr(a.经营单位,1,2),a.月份
        UNION ALL ';                                                              
        END LOOP;
        SQLSTMT0 := SQLSTMT0 || ' ';
        
      --语句截取组成完整语句
      SQLSTMT1 := SUBSTR(SQLSTMT0 , 1 , length( SQLSTMT0 )-11) ;
      
      EXECUTE IMMEDIATE (SQLSTMT1);
     end;
      
   
     
     ----
     
     SQLSTMT1 := 'update SHZC.SHZC_JFBB_QXMC_HANG a set a.指标=0
     where a.指标 in (''-0'',''-0.00'',''全省无数据'')  ';
      EXECUTE IMMEDIATE (SQLSTMT1);
     
     ----结果数据展现
     zhyw.fan_drop_retable('SHZC_JFBB_QXMC_HANG_'||v_rq||'_JG','SHZC');
     SQLSTMT1 := 'create table SHZC.SHZC_JFBB_QXMC_HANG_' || v_rq ||'_JG AS
      select d.字段指标 指标编码,a.月份,a.区县,a.指标,
      nvl(to_number(b.排名),case when a.区县 in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'') then
       row_number() over (partition by a.月份,d.字段指标  order by to_number(a.指标) desc ) end) 排名 
      from   SHZC.SHZC_JFBB_QXMC_HANG a ,
       SHZC.SHZC_JFBB_QXMC_HANG_PM b,
       SHZC.SHZC_JFBB_QXMC_HANG_ZD d
      where a.月份=b.月份(+)
      and a.字段名=b.字段名(+)
      and a.区县=b.区县(+)
      and a.字段名=d.字段名(+)
      and a.区县 in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'')
      and a.指标 is not null
      union all
      select d.字段指标 指标编码,a.月份,a.区县,a.指标,
      nvl(to_number(b.排名),case when a.区县 in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'') then
       row_number() over (partition by a.月份,d.字段指标  order by to_number(a.指标) desc ) end) 排名 
      from   SHZC.SHZC_JFBB_QXMC_HANG a ,
       SHZC.SHZC_JFBB_QXMC_HANG_PM b,
       SHZC.SHZC_JFBB_QXMC_HANG_ZD d
      where a.月份=b.月份(+)
      and a.字段名=b.字段名(+)
      and a.区县=b.区县(+)
      and a.字段名=d.字段名(+)
      and a.区县 not in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'')
      and a.指标 is not null ';
      EXECUTE IMMEDIATE (SQLSTMT1);
      
      ----写入存档表,清除导入数据
      SQLSTMT1 := 'insert into  SHZC.SHZC_JFBB_QXMC_HANG_JGCD  
      select a.*,'''||p_userid||''' user_id ,sysdate in_time 
      from  SHZC.SHZC_JFBB_QXMC_HANG_'||v_rq||'_JG a ';
      EXECUTE IMMEDIATE (SQLSTMT1);
      
      SQLSTMT1 := 'delete shzc.cwbb_jfbbdr_hang_drcc a ';
      EXECUTE IMMEDIATE (SQLSTMT1);
      commit;
      
      v_sql:='
      select a.* from 
      (select c.字段指标 指标编码,a.月份,a.区县,a.指标,
      nvl(to_number(b.排名),case when a.区县 in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'') then
       row_number() over (partition by a.月份,c.字段指标  order by to_number(a.指标)  desc ) end) 排名,d.county_id 
      from   SHZC.SHZC_JFBB_QXMC_HANG a ,
       SHZC.SHZC_JFBB_QXMC_HANG_PM b,
       SHZC.SHZC_JFBB_QXMC_HANG_ZD c,
      (select * from  zhyw.rpt_county d where d.county_id not in (''1'',''0'',''A'',''zbtyqd'') ) d
      where a.月份=b.月份(+)
      and a.字段名=b.字段名(+)
      and a.区县=b.区县(+)
      and a.字段名=c.字段名(+)
      and substr(a.区县,1,2)=substr((+),1,2)
      and a.指标 is not null
      and a.区县 in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'')
      union all
      select c.字段指标 指标编码,a.月份,a.区县,a.指标,
      nvl(to_number(b.排名),case when a.区县 in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'') then
       row_number() over (partition by a.月份,c.字段指标  order by to_number(a.指标)  desc ) end) 排名,d.county_id 
      from   SHZC.SHZC_JFBB_QXMC_HANG a ,
       SHZC.SHZC_JFBB_QXMC_HANG_PM b,
       SHZC.SHZC_JFBB_QXMC_HANG_ZD c,
      (select * from  zhyw.rpt_county d where d.county_id not in (''1'',''0'',''A'',''zbtyqd'') ) d
      where a.月份=b.月份(+)
      and a.字段名=b.字段名(+)
      and a.区县=b.区县(+)
      and a.字段名=c.字段名(+)
      and substr(a.区县,1,2)=substr((+),1,2)
      and a.指标 is not null
      and a.区县 not in (select c.名称 from  SHZC.cwbb_bbzx_qx_pm_bm_mx c where c.区县市区=''区县'')) a
      order by a.指标编码,a.月份,a.county_id,a.区县  '       ;
      open p_cursor for v_sql;

end ;