如何在SQL SELECT语句中执行IF...THEN?
例如:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product发布于 2008-09-15 14:38:24
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 ProductCASE语句可以嵌入到其他CASE语句中,甚至可以包含在聚合中。
SQL Server Denali (SQL Server2012)添加了access中也提供的IIF语句(由Martin Smith指出):
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product发布于 2008-09-15 15:10:50
在这种情况下,case语句是您的朋友,它采用以下两种形式之一:
简单的例子:
SELECT CASE <variable> WHEN <value> THEN <returnvalue>
WHEN <othervalue> THEN <returnthis>
ELSE <returndefaultcase>
END AS <newcolumnname>
FROM <table>扩展后的情况:
SELECT CASE WHEN <test> THEN <returnvalue>
WHEN <othertest> THEN <returnthis>
ELSE <returndefaultcase>
END AS <newcolumnname>
FROM <table>您甚至可以将case语句放在order by子句中,以实现真正奇特的排序。
发布于 2011-07-21 07:39:11
在SQL Server2012中,您可以使用 function来实现这一点。
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product这实际上只是编写CASE的一种简写方式(尽管不是标准的SQL)。
与扩展的CASE版本相比,我更喜欢简洁性。
IIF()和CASE都可以解析为SQL语句中的表达式,并且只能在定义良好的位置使用。
Transact-
表达式不能用于控制Transact-SQL语句、语句块、用户定义函数和存储过程的执行流。
如果这些限制无法满足您的需求(例如,需要根据某些条件返回不同形式的结果集),则SQL Server也有一个过程IF关键字。
IF @IncludeExtendedInformation = 1
BEGIN
SELECT A,B,C,X,Y,Z
FROM T
END
ELSE
BEGIN
SELECT A,B,C
FROM T
ENDCare must sometimes be taken to avoid parameter sniffing issues with this approach however。
https://stackoverflow.com/questions/63447
复制相似问题