SQL语句--CASE when...

本文主要介绍SQL语句中CASE WHEN的使用。可将{case when then else end}当作“一个数”放在能放数的位置,如select后、where条件中等。还总结了该函数嵌套其他内容时的注意点,如A位置只能写判断条件,B、C位置可写特定查询语句等,并通过实例进行说明。

SQL语句–CASE when…

case
    when A
    then B
    else C
end

{case when then else end }这一串,可以直接把他当成 “一个数 ”来看,这个“数”可以放在任何位置,如:select后,where条件中,group by里…

能放数的地方,就能放{case when then else end }这一串,这就能明白为什么不能返回结果集了**

实战总结
关于该函数,嵌套其他内容时,要注意一下几点:
1.A 位置:只能写判断条件
2.B 位置:可以写查询语句,但是该查询结果必须只能有一行一列;
3.B 位置:可以再嵌套一个case when…end
4.C 位置:同B位置

下面举例
1.反例:.A 位置:只能写判断条件

SELECT 
CASE
    when (select [EmployeeID] from Employee WHERE [EmployeeID]='1002')
    then '王敏'
    else 'NULL'
END
FROM dbo.Employee

返回提示错误
在这里插入图片描述
我们再改成一个判断条件试试

SELECT 
CASE
    when [EmployeeID]='1002'
    then '王敏'
    else 'NULL'
END
FROM dbo.Employee

返回结果:OK
在这里插入图片描述
2.反例:B 位置:可以写查询语句,但是该查询结果必须只能有一行一列;

SELECT 
CASE
    when [EmployeeID]='1002'
    then (select [EmployeeID] from Employee WHERE [Name]='1')
    else 'NULL'
END
FROM dbo.Employee

返回错误提示:
在这里插入图片描述
这是因为在Employee 表中,有多个员工的姓名 [Name]=‘1’
执行 select [EmployeeID] from Employee WHERE [Name]=‘1’
返回结果:
在这里插入图片描述

而进行判断后的返回值只能有一个,不能返回结果集
所以互相冲突,提示了错误

我们改下then 后的SELECT语句试试
执行 select [EmployeeID] from Employee WHERE [Name]=‘1’ AND EmployeeID=‘2003’
返回结果:
在这里插入图片描述
此时只有一行一列
再执行下看看

SELECT 
CASE
    when [EmployeeID]='1002'
    then (select [EmployeeID] from Employee WHERE [Name]='1' AND EmployeeID='2003')
    else 'NULL'
END
FROM dbo.Employee

返回结果:OK
在这里插入图片描述
3.B 位置:可以再嵌套一个case when…end

case
    when A
    then -----then下面可以嵌套一个case when
         (case
             when A
             then B
             else C
          end)
    else -----else下面可以嵌套一个case when
         (case
             when A
             then B
             else C
          end)
end
SQL Server 中,`CASE WHEN` 和 `IIF()` 都可以用来实现条件判断,但它们的语法结构、灵活性和使用场景有所不同。下面详细说明它们的区别,并给出示例代码。 --- ### 1. `CASE WHEN` 用法 `CASE WHEN` 是 SQL 标准中的条件表达式,支持多个条件判断,语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END ``` **示例:根据成绩返回等级** ```sql SELECT Score, CASE WHEN Score >= 90 THEN 'A' WHEN Score >= 80 THEN 'B' WHEN Score >= 70 THEN 'C' ELSE 'D' END AS Grade FROM Students; ``` **特点:** - 支持多个 `WHEN` 分支 - 支持复杂条件表达式(如范围判断) - 适用于所有 SQL 实现(可移植性强) --- ### 2. `IIF()` 用法 `IIF()` 是 SQL Server 2012 引入的一个函数,用于简化简单的三元条件表达式,语法如下: ```sql IIF(boolean_expression, true_value, false_value) ``` **示例:判断成绩是否及格** ```sql SELECT Score, IIF(Score >= 60, 'Pass', 'Fail') AS Result FROM Students; ``` **特点:** - 只支持两个分支(true/false) - 语法简洁,适合简单判断 - 不是 SQL 标准函数,仅适用于 SQL Server 2012 及以上版本 --- ### 3. `CASE WHEN` 与 `IIF()` 的区别总结 | 特性 | `CASE WHEN` | `IIF()` | |------|-------------|---------| | 支持多条件判断 | ✅ | ❌(仅支持 true/false) | | 语法复杂度 | 稍复杂 | 简洁 | | 可读性 | 更适合复杂逻辑 | 更适合简单逻辑 | | 兼容性 | SQL 标准,兼容性强 | SQL Server 专属,版本要求较高 | | 性能差异 | 无明显差异 | 无明显差异 | --- ### 4. 实际对比示例 **需求:根据成绩判断等级(A/B/C/D)** - 使用 `CASE WHEN`: ```sql SELECT Score, CASE WHEN Score >= 90 THEN 'A' WHEN Score >= 80 THEN 'B' WHEN Score >= 70 THEN 'C' ELSE 'D' END AS Grade FROM Students; ``` - 使用 `IIF()`(不推荐,嵌套复杂): ```sql SELECT Score, IIF(Score >= 90, 'A', IIF(Score >= 80, 'B', IIF(Score >= 70, 'C', 'D'))) AS Grade FROM Students; ``` 可以看到,`IIF()` 在嵌套使用时可读性差,而 `CASE WHEN` 更加清晰。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值