oracle 查询结果列转行
时间: 2024-08-03 18:01:11 浏览: 64
在Oracle数据库中,如果你想要将查询的结果集中的某些列转换为行,通常可以使用PIVOT操作或者UNION ALL和CASE WHEN子句。这两种方法都可以帮助你在SQL查询中重塑数据。
1. PIVOT(透视)操作:当你需要将单个列的数据根据某个条件展开成多行时,可以使用PIVOT。假设有一个表`sales`,有字段`product`, `date`, 和 `quantity`,你可以这样做:
```sql
SELECT *
FROM sales
PIVOT (
SUM(quantity)
FOR product IN ('Product1', 'Product2', 'Product3')
);
```
这会把每个产品的总销售量分别放在新的一行上。
2. UNION ALL + CASE WHEN:如果列的数量固定,并且可以根据特定规则进行转换,你可以先创建临时表,然后通过CASE WHEN表达式进行分组:
```sql
CREATE TABLE temp_table AS
SELECT date, product, quantity,
ROW_NUMBER() OVER (ORDER BY date) as row_num
FROM your_table;
SELECT date, product1, product2, product3
FROM (
SELECT date, product, quantity,
CASE WHEN row_num = 1 THEN product ELSE NULL END AS product1,
CASE WHEN row_num = 2 THEN product ELSE NULL END AS product2,
...
FROM temp_table
) subquery
WHERE product IS NOT NULL;
```
这里假设你想把`quantity`按日期分配到三个产品列(product1, product2, product3),每种产品只显示一行。
阅读全文