orclae 查询数据库语句的列表转行
时间: 2025-02-20 22:51:42 浏览: 32
### Oracle SQL 使用 `UNPIVOT` 将列表转换为行
在 Oracle 数据库中,特别是自 11g 版本起引入了 `UNPIVOT` 功能来实现行列互换操作。此功能允许将多列数据转换为单列中的多个行[^1]。
下面是一个具体的例子展示如何利用 `UNPIVOT` 实现这一目标:
假设有一个表名为 `sales_data`,其中包含如下字段:`id`, `product_a_sales`, `product_b_sales`, `product_c_sales`。现在希望把产品销售量的数据按照行的形式展现出来而不是按照不同的列分别存储各个产品的销售额度。
#### 创建示例表格并插入测试数据
```sql
CREATE TABLE sales_data (
id NUMBER,
product_a_sales NUMBER,
product_b_sales NUMBER,
product_c_sales NUMBER
);
INSERT INTO sales_data VALUES (1, 100, 200, 300);
INSERT INTO sales_data VALUES (2, 150, 250, 350);
COMMIT;
```
#### 执行 UNPIVOT 转换查询
为了达到目的,可以编写如下的 SQL 查询语句:
```sql
SELECT *
FROM sales_data
UNPIVOT (
sales_value FOR product_name IN (
product_a_sales AS 'Product A',
product_b_sales AS 'Product B',
product_c_sales AS 'Product C'
)
);
```
这段代码会返回一个新的视图,在这个新结构里每一行代表了一个特定商品在一个记录上的销量情况,并且指定了该条目属于哪个具体的产品类别[^4]。
上述方法能够有效地完成从宽表到长表的转变过程,即实现了由横向布局向纵向排列的变化需求。需要注意的是,在实际应用过程中可能还需要考虑其他因素比如性能优化等问题[^3]。
阅读全文
相关推荐



