SQL语句中通过CASE的方式实现IF…THEN

本文主要介绍在SQL Server中如何通过CASE语句实现IF…THEN的效果,CASE语句可以通过判断将满足条件的值转换为其他值,原文见stackoverflow:how-do-i-perform-an-if-then-in-an-sql-select。其他数据库也是支持CASE语句的,回答中介绍的IIF倒不是所有的数据库都支持,像低版本的Postgresql中就不支持。

原问题:

SQL查询语句如何实现IF…THEN的效果,比如:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

采纳答案:

在SQL语句中CASE语句是可以实现IF…THEN的效果,并且在所有的SQL SERVER版本中都支持:

SELECT CAST(
             CASE
                  WHEN Obsolete = 'N' or InStock = 'Y'
                     THEN 1
                  ELSE 0
             END AS bit) as Saleable, *
FROM Product

如果查询结果不需要布尔值,也可以不用CAST将结果转义:

SELECT CASE
            WHEN Obsolete = 'N' or InStock = 'Y'
               THEN 1
               ELSE 0
       END as Saleable, *
FROM Product

CASE语句是可以嵌套使用的(下面的语句仅仅是展示使用方法):

select case when (
case when Obsolete = 'N' or InStock = 'Y' then 1
else 0
end) = 1 then 'YES'
else 'NO'
end as saleable,*
from product

CASE语句也可以用在聚合查询中:

SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1
ELSE 0
END as Saleable, count(*)
FROM Product
group by CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1
ELSE 0
END

SQL SERVER 2012添加了IIF语句,该语句也可以实现相同的效果:

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product

执行SQL语句验证结果

本文根据StackOverflow翻译而来,不代表烟海拾贝立场,如若转载,请注明出处:https://somirror.com/611.html

(0)
上一篇 2022-02-25 16:26
下一篇 2022-02-26 13:12

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注