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