SQL Server INLINE IF ELSE

Alo*_*Leo 39 sql-server if-statement

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

jah*_*ahu 71

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

在SQL Server 2012中,您可以使用以下IIF功能:

IIF ( boolean_expression, true_value, false_value )
Run Code Online (Sandbox Code Playgroud)

例:

SELECT IIF(someColumn = 1, 'yes', 'no')
Run Code Online (Sandbox Code Playgroud)

  • Upvoted,我更喜欢IIF与CASE的简单布尔条件,因为它更加简化 (2认同)

SWe*_*eko 64

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

Case有两种形式,一种是:

select 
 case MyFlag 
   when 1 then 'YES'
   when 0 then 'NO'
   else 'OOPS'
 end
from MyTable
Run Code Online (Sandbox Code Playgroud)

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

select 
 case 
   when MyFlag = 1 then 'YES'
   when MyFlag = 0 then 'NO'
   -- when some unrelated condition...
   else 'OOPS'
 end
from MyTable
Run Code Online (Sandbox Code Playgroud)

它会在一定程度上评估条件列表并返回第一个条件.

PS该end部分是强制性的,我通常会忘记这一点.简单的case说明通常也可以完全内联,例如

select (case MyFlag when 1 then 'Yes' else 'No' end) as MyFlagDesc
Run Code Online (Sandbox Code Playgroud)


MAX*_*AXE 11

两种可能性:

(CASE WHEN condition1 THEN Value1 ELSE Value2 END)
Run Code Online (Sandbox Code Playgroud)

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

(CASE value_to_check WHEN Value1 THEN Result1 [WHEN ... THEN ...] ELSE OtherResult END)
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 7

像这样的东西:

SELECT 
    CASE YourColumn
       WHEN 0 THEN 'no'
       WHEN 1 THEN 'yes'
       ELSE 'nothing'
    END
FROM dbo.YourTable
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 7

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

IIF(@PersonHomePhoneID > 0 , @PersonHomePhoneID, IIF(@PersonWorkPhoneID > 0 , @PersonWorkPhoneID, IIF(@PersonCellPhoneID > 0 , @PersonCellPhoneID, 0))) 
Run Code Online (Sandbox Code Playgroud)

问题的答案:

IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))
Run Code Online (Sandbox Code Playgroud)