在我的表中,我得到一个列,其值为0或1.如果该列为0,则将值输出为“no”;如果1我应该为所有行输出'是'。如何仅使用SQL语句执行此操作。感谢
答案 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,我有三个变量,我想知道哪一个大于零,但我知道优先顺序PersonHomePhoneID,PersonWorkPhoneID和PersonCellPhoneID
IIF(@PersonHomePhoneID > 0 , @PersonHomePhoneID, IIF(@PersonWorkPhoneID > 0 , @PersonWorkPhoneID, IIF(@PersonCellPhoneID > 0 , @PersonCellPhoneID, 0)))
问题的答案:
IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))