SQL中case when 总结

本文详细介绍了SQL中CASE WHEN语句的两种形式:简单CASE函数和CASE搜索函数,并通过具体实例展示了如何使用CASE WHEN对查询结果进行条件判断和转换。

SQL 中case when 总结

简单的梳理一下case when 的用法
- 简单Case函数
- Case搜索函数


简单case 函数语法

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

Case搜索函数语法

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

两种方式根据不同的场景进行使用。

实例

测试用的DDL语句

CREATE TABLE `COMMON_INFO` (
  `ID` INT (11) NOT NULL AUTO_INCREMENT,
  `NAME` CHAR(20) NOT NULL DEFAULT '' COMMENT '名字',
  `TYPE` CHAR(10) NOT NULL DEFAULT '' COMMENT '职业类型:1 学生 2 企业职员 3 军人 4 操作人员 5 其他',
  `PLACE` VARCHAR (255) NOT NULL DEFAULT '' COMMENT '地区',
  PRIMARY KEY (`ID`)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = UTF8 ;

SQL 语句

insert into `common_info` (`Name`, `Type`, `place`) values('王德卿','2','河南省');
insert into `common_info` (`Name`, `Type`, `place`) values('董炎彦','2','安徽省');
insert into `common_info` (`Name`, `Type`, `place`) values('罗大佑','1','台湾省');

查询SQL

SELECT * FROM COMMON_INFO;

全部记录

idNameTypeplace
1王德卿2河南省
2董炎彦2安徽省
3罗大佑1台湾省

简单case 函数

SELECT NAME '姓名',
       CASE TYPE
         WHEN 2 THEN
          '企业职员'
         ELSE
          '其他'
       END '类型枚举值'
  FROM COMMON_INFO;

返回记录

姓名类型枚举值
王德卿企业职员
董炎彦企业职员
罗大佑其他
### SQLCASE WHEN 嵌套用法 在 SQL 查询中,`CASE WHEN` 语句可以通过嵌套的方式实现更复杂的多级条件判断。这种嵌套方式使得开发人员能够针对多个层次的逻辑进行精确控制。 #### 嵌套 `CASE WHEN` 的基本语法 以下是嵌套 `CASE WHEN` 的通用语法: ```sql CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN CASE WHEN nested_condition_1 THEN nested_result_1 WHEN nested_condition_2 THEN nested_result_2 ELSE nested_default_result END ELSE default_result END ``` 上述语法展示了如何在一个外部 `CASE WHEN` 条件内部再嵌入另一个 `CASE WHEN` 表达式[^4]。 #### 实际应用示例 假设有一个名为 `orders` 的表,其中包含以下列: - `order_id`: 订单ID - `amount`: 订单金额 - `status`: 订单状态 (例如 'pending', 'shipped', 'delivered') 现在需要根据订单的状态和金额来分类订单,并给出相应的标签。具体需求如下: 1. 如果订单处于 `'pending'` 状态,则进一步检查金额: - 若金额小于等于 100,则标记为 `"Low Value Pending"` - 否则标记为 `"High Value Pending"` 2. 如果订单已发货 (`'shipped'`) 或已完成 (`'delivered'`),则统一标记为 `"Processed Order"` 对应的 SQL 查询可以写成这样: ```sql SELECT order_id, amount, status, CASE WHEN status = 'pending' THEN CASE WHEN amount <= 100 THEN 'Low Value Pending' ELSE 'High Value Pending' END WHEN status IN ('shipped', 'delivered') THEN 'Processed Order' ELSE 'Unknown Status' END AS order_label FROM orders; ``` 在这个例子中,外层的 `CASE WHEN` 判断了订单的整体状态,而当状态为 `'pending'` 时,又通过内层的 `CASE WHEN` 进一步细化了金额范围的判断[^3]。 #### 注意事项 1. **性能影响**: 随着嵌套层数增加,查询复杂度会提高,可能会影响执行效率。因此,在设计查询时应尽量简化逻辑。 2. **可读性**: 复杂的嵌套可能导致代码难以维护,建议适当分解逻辑或将部分逻辑移至存储过程或函数中[^4]。 --- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值