动态行转列

原创 2012年03月26日 16:37:12

在开发过程中,很多时候并不知道有多上行转换为列,所以只有通过动态来进行转换。下面是我在工作中的一个简答例子(其实行转列的动态sql无非就是拼sql语句,然后通过游标的方式进行读取转换):

CREATE OR REPLACE PROCEDURE P_TEST_LIUHC(CYCLE_DATE IN VARCHAR2)
AUTHID CURRENT_USER
IS
 V_SQL VARCHAR2(20000);
-- P_YW_ASSESS_ID  NUMBER;
-- P_ASSESS_COLUMN VARCHAR2(30);

 ----------查找所使用到的指标ID
 CURSOR CURSOR_1 IS
       SELECT DISTINCT YW_ASSESS_ID,ASSESS_COLUMN
       FROM   RPT_KPI_YW_QD X, CS_ASSESS Y
       WHERE  X.YW_ASSESS_ID=Y.ASSESS_ID AND
              STATEMENT_DATE = ''||CYCLE_DATE||'' AND
              YW_ASSESS_ID IS NOT NULL  AND YW_KPI_TYPE<>'计件考核宽表'
       ORDER  BY YW_ASSESS_ID,ASSESS_COLUMN;

BEGIN
  ---定义一个SQL前缀(以下采用拼凑SQL的方式逐级拼凑)
  V_SQL := 'SELECT     YW_KPI_TYPE,
                       YW_BSS_ORG_ID,
                       YW_BSS_ORG_NAME,
                       YW_CHANNEL_TYPE_ID';

-------开始循使用  (获取所有指标并分组)
 --OPEN CURSOR_1;
   --FETCH CURSOR_1 INTO P_YW_ASSESS_ID,P_ASSESS_COLUMN;
    FOR V_XCLCK IN CURSOR_1
      LOOP
        V_SQL := V_SQL || ',' || 'SUM(DECODE(YW_ASSESS_ID,''' || V_XCLCK.YW_ASSESS_ID ||
                 ''',AMOUNT,0)) AS ' || V_XCLCK.ASSESS_COLUMN;
      END LOOP;

      V_SQL := V_SQL || ' ,STATEMENT_DATE,REMARK '||' FROM RPT_KPI_YW_QD WHERE STATEMENT_DATE = '||CYCLE_DATE||'
                                             GROUP BY YW_KPI_TYPE,
                                                      YW_BSS_ORG_ID,
                                                      YW_BSS_ORG_NAME,
                                                      YW_CHANNEL_TYPE_ID,
                                                      STATEMENT_DATE,
                                                      REMARK';
     -- DBMS_OUTPUT.PUT_LINE(V_SQL);
     -- EXECUTE IMMEDIATE 'DROP VIEW RESULT_LIUHC';
      DROP_TEMP_TABLE('RESULT_LIUHC_1');
      V_SQL := 'CREATE TABLE RESULT_LIUHC_1  AS '||  V_SQL;
      --DBMS_OUTPUT.PUT_LINE(V_SQL);
      EXECUTE IMMEDIATE V_SQL;

COMMIT;


END P_TEST_LIUHC;

该过程主要通过账期来对表RPT_KPI_YW_QD进行行转列。希望对其他人有所启发。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql动态行转列

  • 2016-11-04 14:13
  • 33KB
  • 下载

sql行转列动态与静态

动态行转列

因狗血的报表展现需求 需要根据每天的新增用户数量 选取前5个渠道.然后把该渠道当月每一天的新增用户数据绘制在图表上X轴是 日期 Y轴是新增用户数量 画5条线. 这5条线是动态的,每天不同的线条.数据经...

三表动态行转列

今日论坛上碰到一个帖子,要求对三表进行连接后动态行转列,先前只做过两表的,研究了一番,终于做成,列于后,并添加了注释.   --三表动态行转列 create table D ( [id...

--三表动态行转列

今日论坛上碰到一个帖子,要求对三表进行连接后动态行转列,先前只做过两表的,研究了一番,终于做成,列于后,并添加了注释.   view plain --三表动态行转...

[MSSQL]采用pivot函数实现动态行转列

环境要求:2005+在日常需求中经常会有行转列的事情需求处理,如果不是动态的行,那么我们可以采取case when 罗列处理。在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处理,...

MySQL存储过程中使用动态行转列

数据表结构 这里我用一个比较简单的例子来说明,也是行转列的经典例子,就是学生的成绩 三张表:学生表、课程表、成绩表 学生表 就简单一点,学生学号、学生姓名两个字段 CREATE TABL...

sql动态行转列

/* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-03-09 地点:广东深圳 说明:普通行列转换(version 1....

ASP.NET SQLServer 行转列,不固定列,动态列 的实现

前言刚开始工作就成了被温水煮的青蛙的话,那该有多难吃啊。所以要保持冷静的头脑,好好思考自己该做的不该做的事,好好的提升自己的能力,给自己加点料。嗯,这样就算真被煮熟了,也会可口很多吧。问题背景这个问题...

ibatis 动态列缓存问题;oracle行转列;oracle使用数字或特殊字符作列的别名

1、iBatis会自动缓存每条查询语句的列名映射,所有如果你动态生成列名的话就有可能造成查询列名无效的问题。 ibaits 会缓存查询的meta信息,在生成动态列时一定要加上 remapResu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)