云计算百科
云计算领域专业知识百科平台

[Oracle] UNPIVOT 列转行

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

① 源表数据列的数据类型需要保持一致,否则可能会出现转换失败的情况

赞(0)
未经允许不得转载:网硕互联帮助中心 » [Oracle] UNPIVOT 列转行
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!