oracle列转行函数unpivot
时间: 2025-01-11 15:52:14 浏览: 82
### 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]。
阅读全文
相关推荐


















