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
列的值。