SQL Server INLINE IF ELSE

时间:2011-07-07 08:56:21

标签: sql-server if-statement

在我的表中,我得到一个列,其值为0或1.如果该列为0,则将值输出为“no”;如果1我应该为所有行输出'是'。如何仅使用SQL语句执行此操作。感谢

5 个答案:

答案 0 :(得分:62)

据我所知,这个问题(显示在“sql server inline if”的谷歌搜索结果顶部)是2年之久,但是对于SQL Server 2012,答案有点过时了。它似乎也是SQL inline if statement type question的副本,但是这个问题(即使是更老的问题)也没有最新的答案。

在SQL Server 2012中,您可以使用IIF function

IIF ( boolean_expression, true_value, false_value )

示例:

SELECT IIF(someColumn = 1, 'yes', 'no')

答案 1 :(得分:61)

SQL Server没有内联if语句,但它有一个内联case可用于完成相同的操作。

Case有两种形式,一种是:

select 
 case MyFlag 
   when 1 then 'YES'
   when 0 then 'NO'
   else 'OOPS'
 end
from MyTable

它的使用就像C语言中的开关一样,另一个是:

select 
 case 
   when MyFlag = 1 then 'YES'
   when MyFlag = 0 then 'NO'
   -- when some unrelated condition...
   else 'OOPS'
 end
from MyTable

它会有条件地评估条件列表并返回第一个已完成的条件。

P.S。 end部分是强制性的,我通常会忘记这一点。 一个简单的case版本通常也可以完全内联,例如

select (case MyFlag when 1 then 'Yes' else 'No' end) as MyFlagDesc

答案 2 :(得分:11)

两种可能性:

(CASE WHEN condition1 THEN Value1 ELSE Value2 END)

或者,最完整的解决方案:

(CASE value_to_check WHEN Value1 THEN Result1 [WHEN ... THEN ...] ELSE OtherResult END)

答案 3 :(得分:7)

这样的事情:

SELECT 
    CASE YourColumn
       WHEN 0 THEN 'no'
       WHEN 1 THEN 'yes'
       ELSE 'nothing'
    END
FROM dbo.YourTable

答案 4 :(得分:2)

我在一行中混合了三个IIF,我有三个变量,我想知道哪一个大于零,但我知道优先顺序PersonH​​omePhoneID,PersonWorkPhoneID和PersonCellPhoneID

IIF(@PersonHomePhoneID > 0 , @PersonHomePhoneID, IIF(@PersonWorkPhoneID > 0 , @PersonWorkPhoneID, IIF(@PersonCellPhoneID > 0 , @PersonCellPhoneID, 0))) 

问题的答案:

IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))