【存储过程里面的CASE,WHEN,THEN的用法。】在SQL存储过程中,`CASE`语句是一个非常实用的条件判断工具,可以用来根据不同的条件返回不同的结果。它类似于编程语言中的`if-else`结构,但更适用于SQL语句中。
`CASE`语句通常与`WHEN`和`THEN`一起使用,用于实现多条件分支逻辑。以下是`CASE`语句的基本语法结构:
```sql
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
...
ELSE 默认结果
END
```
下面是对`CASE`、`WHEN`、`THEN`在存储过程中的用法进行总结,并通过表格形式展示其常见应用场景和示例。
一、基本用法总结
关键字 | 说明 | 示例 |
`CASE` | 开始一个条件判断块 | `CASE` |
`WHEN` | 指定一个条件判断 | `WHEN status = 'A' THEN` |
`THEN` | 当条件满足时返回的结果 | `THEN 'Active'` |
`ELSE` | 当所有条件都不满足时的默认结果 | `ELSE 'Inactive'` |
`END` | 结束整个`CASE`语句 | `END` |
二、存储过程中的典型应用
应用场景 | 说明 | 示例代码 |
根据状态返回不同描述 | 在查询中根据字段值返回不同文本 | ```SELECT name, CASE WHEN status = 'A' THEN 'Active' WHEN status = 'I' THEN 'Inactive' ELSE 'Unknown' END AS status_desc FROM users;``` |
动态计算字段值 | 根据业务规则计算数值 | ```DECLARE @total DECIMAL(10,2); SET @total = CASE WHEN quantity > 100 THEN price 0.9 WHEN quantity > 50 THEN price 0.95 ELSE price END;``` |
多条件分支逻辑 | 在存储过程中实现复杂的逻辑判断 | ```CREATE PROCEDURE GetEmployeeDetails @empId INT AS BEGIN SELECT name, CASE WHEN salary > 10000 THEN 'High' WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium' ELSE 'Low' END AS salary_level FROM employees WHERE id = @empId; END;``` |
分组统计 | 在聚合查询中对数据进行分类统计 | ```SELECT CASE WHEN age < 18 THEN 'Minor' WHEN age BETWEEN 18 AND 60 THEN 'Adult' ELSE 'Senior' END AS age_group, COUNT() AS count FROM users GROUP BY CASE WHEN age < 18 THEN 'Minor' WHEN age BETWEEN 18 AND 60 THEN 'Adult' ELSE 'Senior' END;``` |