CASE语句配合IS NULL和NOT NULL使用

在SQL Server 2005中,有没有更好的方法来编写下面的代码呢?
CASE
WHEN (ID IS NULL)
   THEN 'YES'
WHEN (ID IS NOT NULL)
   THEN 'NO'
END AS ID_Value,

3定义“better”。 - Wesley
我对MSSQL不太熟悉,但如果它有类似MySQL中的IF函数,你可以编写如下代码:IF(ID IS NULL, 'YES', 'NO') AS ID_Value - Kondybas
1SQL Server 2012有IIF,但问题标记为2005。 - Martin Smith
你应该能够通过下面的语句完成这个任务:isnull(nullif(isnull(ID,'Y'),ID),'N') - Jason Cumberland
@Jason 假设ID是一个字符串,当然。否则,这个表达式应该通过调用CASTCONVERT来延长一点。 - Andriy M
试过使用COALESCE函数了吗?CASE COALESCE(ID,0) WHEN 0 THEN 'YES' ELSE 'NO' END - Bappy1988
1@Bappy1988 为什么它会比Jay的答案更好呢? - dezso
如果测试中的列是IMAGE数据类型,则此方法无法使用。SQL Server会抛出以下错误:“除使用IS NULL或LIKE运算符外,不能比较或排序text、ntext和image数据类型。” - Patrick McManus
你正在寻找类似于C#中的"?:"运算符,而在tsql中没有直接等效的。我怀疑你可以编写一个函数来实现它。https://msdn.microsoft.com/en-us/library/ms186755.aspx - paparazzo
1个回答

你试过了吗?
CASE WHEN (ID IS NULL) THEN 'YES' ELSE 'NO' END AS ID_Value,

我现在只能访问到2008年的版本,但我希望这个语法在2005年的版本中仍然有效(看起来像是CASE的原始定义的一部分)。

是的 - 我确实尝试过 CASE WHEN (ID IS NULL) THEN 'YES' ELSE 'NO' END AS ID_Value,但我正在寻找其他更好的方法,类似于在Ms Sql中使用 IF(ID IS NULL, 'YES', 'NO') AS ID_Value,这样一切都可以放在一行上。请问有什么建议吗? - user10061
7这个答案写在一行里。如果你愿意,你可以把整个陈述都写在一行里。 - ypercubeᵀᴹ