2016-12-06 57 views
0

有什麼方法可以反轉Oracle的Pivot函數使用的動態名稱的順序嗎?反轉oracle的Pivot函數的動態名稱

我有這個SQL語句,我必須重新別名每列以在最後附加數字而不是在開頭。這也需要我加倍引用實際的數據透視列的名稱。除了重新對列進行重新別名之外,是否還有更好的方式將數字添加到最後?

SELECT PrimaryKey 
     , PRODUCT 
     , "1_SEQ" AS SEQ_1 
     , "1_TYP" AS TYP_1 
     , "1_STA" AS STA_1 
     , "1_RES" AS RES_1 
     , "2_SEQ" AS SEQ_2 
     , "2_TYP" AS TYP_2 
     , "2_STA" AS STA_2 
     , "2_RES" AS RES_2 
     , "3_SEQ" AS SEQ_3 
     , "3_TYP" AS TYP_3 
     , "3_STA" AS STA_3 
     , "3_RES" AS RES_3 
     , "4_SEQ" AS SEQ_4 
     , "4_TYP" AS TYP_4 
     , "4_STA" AS STA_4 
     , "4_RES" AS RES_4 
     , "5_SEQ" AS SEQ_5 
     , "5_TYP" AS TYP_5 
     , "5_STA" AS STA_5 
     , "5_RES" AS RES_5 
    FROM (
     SELECT PrimaryKey 
      , ForeignKey 
      , Type 
      , STATUS 
      , RESULT 
      , PRODUCT 
      , ROW_NUMBER() OVER (PARTITION BY PrimaryKey ORDER BY ORDERNO, ForeignKey) NUM 
      FROM STG_tbl 
    ) 
    PIVOT (
     MAX(ForeignKey) AS SEQ 
    , MAX(Type) as TYP 
    , MAX(STATUS) AS STA 
    , MAX(RESULT) AS RES 
    FOR NUM IN (1,2,3,4,5) 
    ) 

回答

0

您可以添加一個別名,但不會把數列名後面:

SELECT primarykey 
    , product 
    , "Group 1_SEQ" 
    , "Group 1_TYP" 
    , "Group 1_STA" 
    , "Group 1_RES" 
    , "Group 2_SEQ" 
    , "Group 2_TYP" 
    , "Group 2_STA" 
    , "Group 2_RES" 
    , "Group 3_SEQ" 
    , "Group 3_TYP" 
    , "Group 3_STA" 
    , "Group 3_RES" 
    , "Group 4_SEQ" 
    , "Group 4_TYP" 
    , "Group 4_STA" 
    , "Group 4_RES" 
    , "Group 5_SEQ" 
    , "Group 5_TYP" 
    , "Group 5_STA" 
    , "Group 5_RES" 
    FROM (SELECT primarykey 
      , foreignkey 
      , TYPE 
      , status 
      , result 
      , product 
      , ROW_NUMBER() 
        OVER (
         PARTITION BY primarykey ORDER BY orderno, foreignkey 
        ) 
        num 
      FROM (SELECT 'a' primarykey 
        , 2 foreignkey 
        , 'a' TYPE 
        , 'OK' status 
        , 15 result 
        , 100 orderno 
        , 'shoes' product 
        FROM DUAL 
       UNION ALL SELECT 'a' primarykey 
        , 2 foreignkey 
        , 'a' TYPE 
        , 'OK' status 
        , 99 result 
        , 5 orderno 
        , 'shoes' product 
        FROM DUAL 
       UNION ALL 
       SELECT 'b' primarykey 
        , 3 foreignkey 
        , 'bb' TYPE 
        , 'missing' status 
        , 100 result 
        , 101 orderno 
        , 'socks' product 
        FROM DUAL)) 
       PIVOT 
        (MAX (foreignkey) AS seq, MAX (TYPE) AS typ, MAX (status) AS sta, MAX (result) AS res 
        FOR num 
        IN (1 as "Group 1", 2 as "Group 2", 3 as "Group 3", 4 as "Group 4", 5 as "Group 5")); 
+0

感謝@布賴恩抽空。如果我在in子句中使用正確的別名,它會阻止後面的雙引號,比如「group_1將成爲」group_1_sta ...,但我認爲你沒有辦法改變命令oracle名稱列 – TheDean