Oracle数据库中的UNPIVOT是一种用于将列转换为行的SQL操作,它允许用户将多个列的数据转换为多行的形式,以便进行更灵活的数据分析和报表生成
UNPIVOT主要用于将宽表(多列)转换为长表(多行),减少表的列数,增加行数
语法格式
SELECT pivot_column, value_column
FROM (SELECT column1, column2, column3, ... FROM table_name)
UNPIVOT (value_column FOR pivot_column IN (column1 AS alias1, column2 AS alias2, ...)
)
参数说明
value_column:存放原列值的新列名
pivot_column:存放原列名的新列名,是转换后行数据中列标题(即原列名)所在的列的名称
IN子句中列出了需要被转换的列,以及它们转换后的别名(可选)
示例
假设我们有一个名为sale_data的表,其结构如下:
product_id | jan_sales | feb_sales | mar_sales |
1 | 1000 | 1500 | 2000 |
2 | 800 | 1200 | 1800 |
我们想要将这些销售数据转换为多行的形式,以便进行更方便的数据分析,可以使用UNPIVOT来实现这一转换,具体的SQL语句如下:
SELECT product_id, month, sales
FROM (SELECT product_id, jan_sales, feb_sales, mar_sales FROM sale_data)
UNPIVOT (sales FOR month IN (jan_sales AS 'January', feb_sales AS 'February', mar_sales AS 'March'))
执行上述SQL语句后,将得到以下结果:
product_id | month | sales |
1 | January | 1000 |
1 | Febuary | 1500 |
1 | March | 2000 |
2 | January | 800 |
2 | Febuary | 1200 |
2 | March | 1800 |
提示Tips
① 源表数据列的数据类型需要保持一致,否则可能会出现转换失败的情况