反转oracle的Pivot函数的动态名称

Reverse the dynamic name of oracle's Pivot function

有什么方法可以颠倒 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)
    )

您可以添加别名,但这不会将数字放在列名之后:

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"));