如何在SQL SELECT语句中执行IF...THEN

例如:

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

推荐答案

CASE语句是SQL中最接近IF的语句,在所有版本的SQL Server上都受支持.

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

如果希望结果为布尔值,只需使用CAST运算符.如果你对int感到满意,这是可行的:

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

CASE条语句可以嵌入到其他CASE条语句中,甚至可以包含在聚合中.

SQL Server Denali(SQL Server 2012)添加了IIF语句,该语句在access中也可用(由Martin Smith指出):

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

Sql相关问答推荐

在SQL中查询SQL以返回NULLS和空数据集的 node 列表

从2个表中查找每条记录的唯一最接近的日期匹配

仅在特定字符串之后提取两个圆括号之间的计量单位文本

从原始表列中经过JSON字符串化的对象数组构建视图

雅典娜嵌套Json提取液

SQL SELECT MOST NEST TIMESTAMP BEAT ORDER

我可以在SQL的IN子句中使用比子查询包含的值更少的值吗?

在PostgreSQL中汇总连接表中的 case 值

从另一个没有公共键的表中获取值来加入

日期逻辑(查找过go 90 天内的第一个匹配行)

JSON_VALUE 不适用于提取的 json 中的嵌套路径

在 R 值的 SQL 块中显示值

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

Clob 问题 - 将 clob 列拆分为多行

检索具有相同位置的最小和最大store 数量

如何对 SQL 表中的连续时间戳进行分组?

在 BigQuery 数据集中查找表大小和占总数据集大小的百分比

存储过程 - 动态 SQL 中不同列值的计数

SQLite 中的过滤运行总和视图

如何跨行合并以删除 SQL 中的空值?