在SQL中,CASE WHEN
语句用于根据一个或多个条件评估表达式并返回不同的值。它的语法包含WHEN
子句(条件表达式和返回表达式)、ELSE
子句(默认表达式)和END
关键字。以下是CASE WHEN
语句的两种主要格式及其用法示例:
- 简单Case函数 :
-
格式:
CASE column_name WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_value END
-
示例:
SELECT
CASE job_level
WHEN '1' THEN 'Level 1'
WHEN '2' THEN 'Level 2'
WHEN '3' THEN 'Level 3'
ELSE 'Unknown'
END AS job_level_name
FROM dbo.employee;
```
2. **Case搜索函数** <b class="card40_249__sup_a7f6" data-sup="sup">4</b>:
- 格式:`CASE WHEN column_name = value1 THEN result1 WHEN column_name = value2 THEN result2 ... ELSE default_value END`<b class="card40_249__sup_a7f6" data-sup="sup">1</b>
- 示例:
```sql
UPDATE employee
SET e_wage = CASE
WHEN job_level = '1' THEN e_wage * 1.97
WHEN job_level = '2' THEN e_wage * 1.07
WHEN job_level = '3' THEN e_wage * 0.93
ELSE e_wage
END;
```
### 注意事项<b class="card40_249__sup_a7f6" data-sup="sup">5</b>:
- **返回值** :`CASE WHEN`语句会返回第一个匹配条件的结果,忽略之后的条件<b class="card40_249__sup_a7f6" data-sup="sup">1</b>。
- **默认值** :如果没有条件匹配,可以提供一个`ELSE`子句来定义默认返回值。
- **多列应用** :可以在一个`SELECT`语句中使用多个`CASE WHEN`表达式,分别应用于不同的列。
- **分组统计** :`CASE WHEN`语句常用于条件统计,可以对数据进行分类并执行特定操作<b class="card40_249__sup_a7f6" data-sup="sup">3</b>。
### 示例<b class="card40_249__sup_a7f6" data-sup="sup">5</b>:
以下是一个更复杂的示例,展示了如何在`SELECT`语句中使用`CASE WHEN`进行条件统计<b class="card40_249__sup_a7f6" data-sup="sup">3</b>:
```sql
SELECT
customer_id,
SUM(CASE WHEN product_type = 'A' THEN sales ELSE 0 END) AS total_sales_A,
SUM(CASE WHEN product_type = 'B' THEN sales ELSE 0 END) AS total_sales_B
FROM sales_table
GROUP BY customer_id;
在这个示例中,我们根据product_type
对每个客户的销售额进行了分类统计,并将结果分别命名为total_sales_A
和total_sales_B
。
通过这些示例,你可以看到CASE WHEN
语句在SQL中的多种用途,包括条件筛选、值转换和分组统计等。希望这些信息对你有所帮助!