SQL Server内联CASE WHEN ISNULL和多重检查

5

我有一个包含一些空值的列。如果该列为空,我想根据另一列中的值来进行条件输出。

因此,如果为空,则 case when (如果 c=80 则 'planb';否则如果 c=90 则 'planc')

您如何在行内 T-SQL 语句中编写代码?

谢谢。

2个回答

12
COALESCE(YourColumn, CASE c WHEN 80 then 'planb' WHEN 90 THEN 'planc' END)

2
如果您想强制返回值转换为第一个表达式的数据类型,也可以使用ISNULL函数代替COALESCE函数。 - Jake T.
@Jake - 谢谢,我之前从未注意到这是两者之间的区别! - Martin Smith
在使用ISNULL和COALESCE时要小心,它们并不相同。ISNULL将用替换值替换字符,而COALESCE将进行替换。我可以提供一个例子,其中结果会有所不同。 - Leons
@Leons - COALESCE(foo, bar) 基本上是 CASE WHEN foo IS NOT NULL THEN foo ELSE bar END 的简写形式。我不确定你在替换和代替之间做出了什么区别,你能举个例子吗? - Martin Smith
1
@Leons - 啊,根据Jake的评论,它会被转换为varchar(2) - Martin Smith
显示剩余2条评论

4

您还可以使用嵌套的case语句。假设第一列称为DataColumn。

CASE 
  WHEN DataColumn IS NULL THEN 
    CASE c 
      WHEN 80 THEN 'planb' 
      WHEN 90 THEN 'planc' 
      ELSE 'no plan' 
    END 
  ELSE DataColumn 
END

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接