<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





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


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲精品a在线观看app| 在线看片无码永久免费aⅴ | 大学生高清一级毛片免费| 亚洲一区二区三区首页| 亚洲性无码AV中文字幕| 成人片黄网站色大片免费观看cn | 日韩免费a级在线观看| 亚洲精品国产日韩| 免费理论片51人人看电影| 亚洲国产美女精品久久久| 午夜亚洲福利在线老司机| 久久久久久国产a免费观看不卡| 野花高清在线观看免费完整版中文| 亚洲一区在线免费观看| 9久热这里只有精品免费 | 亚洲妇女水蜜桃av网网站| 永久免费av无码不卡在线观看| 亚洲日韩国产一区二区三区在线| 麻豆国产人免费人成免费视频| 亚洲AV电影院在线观看| 色多多A级毛片免费看| 亚洲色婷婷综合久久| 国内成人精品亚洲日本语音| 亚洲成网777777国产精品| 黄色网站软件app在线观看免费 | 理论片在线观看免费| 亚洲综合图色40p| 黄页网站在线免费观看| 亚洲色欲久久久综合网| 成人福利在线观看免费视频| 国产AV无码专区亚洲A∨毛片| 边摸边吃奶边做爽免费视频网站| 青青在线久青草免费观看| 黄页网址大全免费观看12网站| 成人免费男女视频网站慢动作| 亚洲视频小说图片| 久久国产精品免费视频| 亚洲男同帅GAY片在线观看| 成人免费在线看片| 猫咪www免费人成网站| 免费看小12萝裸体视频国产|