Oracle函数——列转行功能unpivot使用的简单举例

官网解释:Oracle官网-UNPIVOT

一、列转行——UNPIVOT


1、UNPIVOT的简单应用
1.1 应用效果
应用效果
1.2 sql语句

select *
  from 成绩表
unpivot
( 成绩
    for 学科 in ("语文","数学")
)
order by 姓名;

2、UNPIVOT的进阶应用
2.1 应用效果
在这里插入图片描述

2.2 sql语句

select *
  from 成绩表
unpivot
( (成绩,排名)
    for 学科 in ( (语文,语文排名) as "语文",
                  (数学,数学排名) as "数学")
)
order by 姓名;

在这里插入图片描述

### Oracle UNPIVOT 函数详解 #### 功能描述 Oracle UNPIVOT 是一种用于将转换为行的操作,这使得用户能够把原本分布在不同中的数据集中到单个中显示。这种变换对于数据分析和报表生成非常有用。 #### 基本语法结构 UNPIVOT 的基础语法规则如下: ```sql SELECT * FROM table_name UNPIVOT ( value_column FOR name_column IN (column_list) ); ``` 这里 `value_column` 表示新产生的数值所在的名称;`name_column` 则指定了这些值原来所属的名将会被存储在哪一里;而 `column_list` 就是要参与转换的具体表[^2]。 #### 实际应用案例 考虑有一个简单的销售记录表格 `sales_data`,其包含产品编号 (`product_id`) 和三个季度销售额度 (`q1_sales`, `q2_sales`, `q3_sales`) 如下所示: | product_id | q1_sales | q2_sales | q3_sales | |------------|----------|----------|----------| | 1 | 100 | 150 | 200 | | 2 | 80 | 90 | 70 | 现在希望通过使用 UNPIVOT 来获取每条记录按季度展开的结果形式,即每个产品的各个季度销量单独成行展示出来。实现此目的可以通过下面这段 SQL 查询完成: ```sql SELECT product_id, quarter AS period, sales_amount FROM sales_data UNPIVOT ( sales_amount FOR quarter IN (q1_sales AS 'Q1', q2_sales AS 'Q2', q3_sales AS 'Q3') ); ``` 执行上述命令之后会得到类似这样的输出结果: | product_id | period | sales_amount | |------------|--------|--------------| | 1 | Q1 | 100 | | 1 | Q2 | 150 | | 1 | Q3 | 200 | | 2 | Q1 | 80 | | 2 | Q2 | 90 | | 2 | Q3 | 70 | 这样就实现了从宽表向长表的数据形态转变过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值