SQL中的CASE

本文深入解析CASE表达式,一种在数据库中用于条件判断和运算的功能性表达式。文章详细介绍了CASE表达式的两种形式:简单CASE表达式和搜索CASE表达式,并通过实例说明了其在SQL查询中的应用,如如何使用CASE WHEN...THEN...ELSE...END结构进行数据转换。

什么是CASE表达式:
进行运算的功能,是函数的一种(条件,分歧)
①Case表达式的语法
简单Case表达式/搜索Case表达式
搜素Case表达式:
Case When <判断表达式>Then<表达式>
When <判断表达式>Then<表达式>
When <判断表达式>Then<表达式>
Else<表达式>
END
判段条件为真,返回Then中的表达式,并且Case表达式的执行到此为止
Case表达式最终只能返回一个结果
如下图:
在这里插入图片描述
当boxNum=002是 c2的前缀为Error,当boxNum为其他值时,c2前缀为Right
Ps END语句不能省略
Case语句作为表达式,因此可以书写在任意位置
使用Group by 进行分类时,这样的结果会以行的形式输出:

在这里插入图片描述

使用Case When…Then…Else…End 结构将表转为列的形式输出
select Count

### ### SQL 中 `CASE` 语句的使用方法及示例 `CASE` 语句在 SQL 中用于实现条件判断,类似于其他编程语言中的 `if...then...else` 结构。它可以在 `SELECT`、`WHERE` 和 `ORDER BY` 子句中使用,并且支持嵌套操作,适用于复杂逻辑的处理。 #### 简单 `CASE` 语句 简单 `CASE` 语句的语法如下: ```sql CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END ``` 该语句将 `value` 与每个 `WHEN` 子句中的 `compare_value` 进行比较,如果匹配,则返回对应的 `result`。如果没有匹配项,则返回 `ELSE` 中的值。例如: ```sql SELECT CASE a.zt WHEN '07' THEN a.bs WHEN '11' THEN a.bs END AS num FROM dj_zt a WHERE a.qylx_dm = '03'; ``` 此查询会根据 `a.zt` 字段的值返回 `a.bs` 的对应值,否则返回 `NULL` [^3]。 #### 搜索型 `CASE` 语句 搜索型 `CASE` 语句的语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... [ELSE result] END ``` 与简单 `CASE` 语句不同,搜索型 `CASE` 允许直接使用条件表达式进行判断。例如: ```sql SELECT CASE WHEN dbo.user_info.area_code = 3 THEN 'A' WHEN dbo.user_info.area_code = 1 THEN 'B' END AS '名称' FROM dbo.user_info; ``` 此查询会根据 `area_code` 的值返回对应的名称,否则返回 `NULL` [^5]。 #### 在聚合查询中的使用 `CASE` 语句可以结合聚合函数使用,实现条件聚合。例如,在统计不同状态的数据时,可以使用 `CASE` 来区分统计范围: ```sql SELECT COUNT(CASE a.zt WHEN '07' THEN a.bs END) AS num1, COUNT(CASE a.zt WHEN '11' THEN a.bs END) AS num2 FROM dj_zt a WHERE a.qylx_dm = '03'; ``` 此查询分别统计 `zt` 为 `07` 和 `11` 的记录数量 [^3]。 #### 在 `ORDER BY` 子句中的使用 `CASE` 语句也可以用于 `ORDER BY` 子句,实现自定义排序。例如: ```sql SELECT * FROM book ORDER BY CASE WHEN book_name = 'java' THEN 0 ELSE 1 END, book_name; ``` 此查询会将 `book_name` 为 `java` 的记录排在最前面,其余按字母顺序排列 [^2]。 #### 嵌套 `CASE` 语句 `CASE` 语句支持嵌套,可以处理更复杂的条件逻辑。例如: ```sql SELECT CASE WHEN price > 100 THEN CASE WHEN stock > 10 THEN '高价值且库存充足' ELSE '高价值但库存不足' END ELSE CASE WHEN stock > 10 THEN '低价值且库存充足' ELSE '低价值且库存不足' END END AS status FROM products; ``` 此查询通过嵌套 `CASE` 实现了对产品状态的多条件分类 [^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值