oralce case when列转行
时间: 2023-12-07 22:39:48 浏览: 81
以下是使用Oracle的CASE WHEN语句进行列转行的示例:
假设我们有一个名为“employees”的表,其中包含员工姓名和三个月的销售额。我们想要将这个表转换为一个新的表,其中包含员工姓名、月份和销售额。我们可以使用以下查询来实现:
```sql
SELECT employee_name,
'January' AS month,
january_sales AS sales
FROM employees
UNION ALL
SELECT employee_name,
'February' AS month,
february_sales AS sales
FROM employees
UNION ALL
SELECT employee_name,
'March' AS month,
march_sales AS sales
FROM employees;
```
这个查询使用UNION ALL将三个SELECT语句组合在一起。每个SELECT语句都选择员工姓名和一个月的销售额,并使用常量字符串作为月份。通过这种方式,我们可以将每个月的销售额转换为单独的行。
相关问题
case when 列转行
Oracle数据库中的CASE WHEN是一种条件表达式,用于根据不同的条件执行不同的操作。它类似于if-then-else语句,但更加灵活和强大。通过CASE WHEN,可以在查询中进行条件判断,并根据不同的情况返回不同的结果。例如,可以使用CASE WHEN来对查询结果进行分类、计算、过滤等操作。
oracle 查询结果列转行
在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),每种产品只显示一行。
阅读全文