如何使用 Unpivot 将 Oracle 中的行转置为列,如下所示?

How to transpose row to columns in Oracle as shown below using Unpivot?

来源Table

成本类别 成本类别类型 2020 年第一季度 2020 年第二季度 2020 年第 3 季度 2020 年第四季度
受影响的员工 期间费用 10 20 0 4000

取得的成果

成本类别 成本类别类型 季度 价值
受影响的员工 期间费用 2020 年第一季度 10
受影响的员工 期间费用 2020 年第二季度 20
受影响的员工 期间费用 2020 年第三季度 0
受影响的员工 期间费用 2020 年第四季度 4000

期望的结果

成本类别 成本类别类型 季度 季度 年份 价值
受影响的员工 期间成本 2020 年第一季度 Q1 2020 10
受影响的员工 期间费用 2020 年第二季度 Q2 2020 20
受影响的员工 期间费用 2020 年第三季度 Q3 2020 0
受影响的员工 期间成本 2020 年第四季度 Q4 2020 4000

我已经能够使用下面的查询实现上面的 table 2,但不确定如何添加季度和年份列,如 table 3

所示
with a (
  Cost_Category,
  Cost_Category_Type,
  Q1_2020,
  Q2_2020,
  Q3_2020,
  Q4_2020
) as (
  select
    'Employee Impacted',
    'Period Cost',
    ATTRIBUTE_34,
    ATTRIBUTE_35,
    ATTRIBUTE_36,
    ATTRIBUTE_37
  from view_form_539766
)
select *
from a
unpivot (
  value
  for Quarter_Year in (
    q1_2020 as 'Q1-2020',
    q2_2020 as 'Q2-2020',
    q3_2020 as 'Q3-2020',
    q4_2020 as 'Q4-2020',
    
  )
)

使用另一个 CTE。在我的查询中,您当前的“解决方案”是 temp CTE;那么提取季度和年份就很简单了。

SQL> WITH
  2     a (cost_category,
  3        cost_category_type,
  4        q1_2020,
  5        q2_2020,
  6        q3_2020,
  7        q4_2020)
  8     AS
  9        (SELECT 'Employee Impacted', 'Period cost', 10, 20, 0, 4000 FROM DUAL),
 10     temp
 11     AS
 12        (SELECT *
 13           FROM a
 14                UNPIVOT (VALUE
 15                        FOR quarter_year
 16                        IN (q1_2020 AS 'Q1-2020',
 17                           q2_2020 AS 'Q2-2020',
 18                           q3_2020 AS 'Q3-2020',
 19                           q4_2020 AS 'Q4-2020')))
 20  SELECT t.cost_category,
 21         t.cost_category_type,
 22         t.quarter_year,
 23         SUBSTR (t.quarter_year, 1, 2) quarter,
 24         SUBSTR (t.quarter_year, 4) year,
 25         t.VALUE
 26    FROM temp t
 27  /

COST_CATEGORY     COST_CATEGO QUARTER QUARTER  YEAR      VALUE
----------------- ----------- ------- -------- ---- ----------
Employee Impacted Period cost Q1-2020 Q1       2020         10
Employee Impacted Period cost Q2-2020 Q2       2020         20
Employee Impacted Period cost Q3-2020 Q3       2020          0
Employee Impacted Period cost Q4-2020 Q4       2020       4000

SQL>