Oracle UNPIVOT 函数用于将表中的多个列转换为单个列,并在输出中显示原始列名和对应值
SELECT *
FROM table_name
UNPIVOT (
  value_column_name
  FOR column_name_column
  IN (column1 AS 'column1_value', column2 AS 'column2_value', ...)
);
其中:
table_name:要进行逆规范化操作的表名。value_column_name:新生成的值列的列名。column_name_column:新生成的列名列的列名。column1, column2, …:需要进行逆规范化操作的原始列名。'column1_value', 'column2_value', …:分配给原始列名的别名。例如,假设有一个名为 sales_data 的表,包含以下列:product, q1_sales, q2_sales。要使用 UNPIVOT 函数将 q1_sales 和 q2_sales 列转换为单个列,可以使用以下查询:
SELECT product, quarter, sales
FROM sales_data
UNPIVOT (
  sales
  FOR quarter
  IN (q1_sales AS 'Q1', q2_sales AS 'Q2')
);
这将返回一个结果集,其中包含 product、quarter 和 sales 列,其中 quarter 列的值为 ‘Q1’ 或 ‘Q2’,sales 列的值为原始表中 q1_sales 或 q2_sales 列的值。