2016-12-06 34 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

エイリアスを追加することができますが、これは、列名の後に番号をつけません。時間を割いて@Brian

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 ...のようなものにならないようにすることができます。しかし、あなたが正しいと思うのは、順序を変更する方法がないと思います。 – TheDean