<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ordinary hut

    人間一福地,勝似天仙宮
    posts - 61, comments - 50, trackbacks - 0, articles - 1

    oracle行列轉換

    Posted on 2010-01-07 11:08 landor 閱讀(594) 評論(0)  編輯  收藏 所屬分類: oracle
    oracle 10g之后,可以用wm_concat函數來做
    但是這個是把多行匯總到一個字段中,如果是多個動態字段,可以根據這個帖子來做

    以下轉自http://blog.163.com/benthos@126/blog/static/127943815200910189508556/

    /*物料 需要數量 需要倉庫 現存量倉庫 現存量倉庫數量 批次

    A1           2             C1               C1                  20            123

    A1           2             C1               C2                  30            111

    A1           2             C1               C2                  20             222

    A1           2             C1               C3                  10             211

    A2           3             C4               C1                  40             321

    A2           3             C4               C4                  50             222

    A2           3             C4               C4                  60              333

    A2           3             C4               C5                   70             223

    我需要把上面的查詢結果轉換為下面的。

    物料 需要數量 需要倉庫 C1   C2   C3   C4   C5

    A1         2             C1        20   50    10     0     0

    A2         3             C4         40   0      0    110  70

    */

    ---------------------------------------------------------------建表

    ----------------判斷表是否存在

    declare num number;

    begin

        select count(1) into num from user_tables where table_name='TEST';

        if num>0 then

          execute immediate 'drop table TEST';

        end if;

    end;

    ----------------建表

    CREATE TABLE TEST(

        WL VARCHAR2(10),

        XYSL INTEGER,

        XYCK VARCHAR2(10),

        XCLCK VARCHAR2(10),

        XCLCKSL INTEGER,

        PC INTEGER

    );

    ----------------第一部分測試數據

    INSERT INTO TEST VALUES('A1', 2, 'C1', 'C1' ,        20,         123);

    INSERT INTO TEST VALUES('A1', 2, 'C1', 'C2' ,        30,         111);

    INSERT INTO TEST VALUES('A1', 2, 'C1', 'C2' ,        20,         222);

    INSERT INTO TEST VALUES('A1', 2, 'C1', 'C3' ,        10,         211);

    INSERT INTO TEST VALUES('A2', 3, 'C4', 'C1' ,        40,         321);

    INSERT INTO TEST VALUES('A2', 3, 'C4', 'C4' ,        50,         222);

    INSERT INTO TEST VALUES('A2', 3, 'C4', 'C4' ,        60,         333);

    INSERT INTO TEST VALUES('A2', 3, 'C4', 'C5' ,        70,         223);

    COMMIT;

    --select * from test;

    ---------------------------------------------------------------行轉列的存儲過程

    CREATE OR REPLACE PROCEDURE P_TEST IS

      V_SQL VARCHAR2(2000);

      CURSOR CURSOR_1 IS SELECT DISTINCT T.XCLCK FROM TEST T ORDER BY XCLCK;

       

        BEGIN

          V_SQL := 'SELECT WL,XYSL,XYCK';

          FOR V_XCLCK IN CURSOR_1

          LOOP

            V_SQL := V_SQL || ',' || 'SUM(DECODE(XCLCK,''' || V_XCLCK.XCLCK ||

                     ''',XCLCKSL,0)) AS ' || V_XCLCK.XCLCK;

          END LOOP;

         

          V_SQL := V_SQL || ' FROM TEST GROUP BY WL,XYSL,XYCK ORDER BY WL,XYSL,XYCK';

          --DBMS_OUTPUT.PUT_LINE(V_SQL);

          V_SQL := 'CREATE OR REPLACE VIEW RESULT  AS '||  V_SQL;

          --DBMS_OUTPUT.PUT_LINE(V_SQL);

          EXECUTE IMMEDIATE V_SQL;

        END;

    ----------------------------------------------------------------結果

    ----------------執行存儲過程,生成視圖

    BEGIN

      P_TEST;              

    END;

    ----------------結果

    SELECT * FROM RESULT T;

    WL                                            XYSL XYCK               C1         C2         C3         C4         C5

    ---------- --------------------------------------- ---------- ---------- ---------- ---------- ---------- ----------

    A1                                               2 C1                 20         50         10          0          0

    A2                                               3 C4                 40          0          0        110         70

    ----------------第二部分測試數據

    INSERT INTO TEST VALUES('A1', 2, 'C1', 'C6' ,        20,         124);

    INSERT INTO TEST VALUES('A2', 2, 'C1', 'C7' ,        30,         121);

    INSERT INTO TEST VALUES('A3', 2, 'C1', 'C8' ,        20,         322);

    COMMIT;

    ----------------報告存儲過程,生成視圖

    BEGIN

      P_TEST;              

    END;

    ----------------結果

    SELECT * FROM RESULT T;

    WL     XYSL XYCK          C1       C2         C3         C4         C5         C6         C7         C8

    ----- ----- -------- ------- -------- ---------- ---------- ---------- ---------- ---------- ----------

    A1        2       C1            20       50         10          0          0         20          0          0

    A2        2       C1             0        0          0          0          0          0         30          0

    A2        3       C4            40        0          0        110         70          0          0          0

    A3        2       C1             0        0          0          0          0          0          0         20

    --------------- 刪除實體

    DROP VIEW RESULT;

    DROP PROCEDURE P_TEST;

    DROP TABLE TEST;  

    0

    0

    0





    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲婷婷天堂在线综合| 精品国产综合成人亚洲区| 亚洲沟沟美女亚洲沟沟| 日本高清免费观看| 久久91亚洲精品中文字幕| 未满十八18禁止免费无码网站 | 成人免费在线观看网站| 亚洲伦理中文字幕| 成人免费福利电影| 亚洲AV香蕉一区区二区三区| 日批日出水久久亚洲精品tv| 一区二区免费国产在线观看| 亚洲中文字幕在线第六区| 最近中文字幕大全免费版在线| 亚洲AV无码日韩AV无码导航| 3344免费播放观看视频| 亚洲人成7777| 免费在线观看中文字幕| 在线观看免费黄色网址| 亚洲美女aⅴ久久久91| www.999精品视频观看免费| 亚洲国产欧美国产综合一区| 亚洲午夜激情视频| 久久午夜夜伦鲁鲁片免费无码| 亚洲国产成人资源在线软件| 日韩免费观看的一级毛片| www一区二区www免费| 亚洲韩国—中文字幕| 好吊妞998视频免费观看在线| 深夜a级毛片免费视频| 亚洲AV日韩精品久久久久久| 手机在线毛片免费播放| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 亚洲精品国产V片在线观看| 一区二区三区在线免费看| 亚洲爆乳少妇无码激情| 久久九九亚洲精品| 午夜a级成人免费毛片| 秋霞人成在线观看免费视频| 亚洲国产精品成人午夜在线观看| 久久精品国产亚洲沈樵|