SQL Case语句语法

时间:2009-05-27 14:23:55

标签: sql-server case

我正在尝试编写一个select语句,它将选择一些字段,包括一个电子邮件字段。此表中有3个电子邮件字段,有时可以包含空值。我想看看3个领域; [电子邮件地址1],[电子邮件地址2],[电子邮件地址3]基本上我想做的是,如果[电子邮件地址3]为空,那么我想要[电子邮件地址2]中的值,如果电子邮件地址2为空,而不是我想要的值在[电子邮件地址1]

我似乎无法正确使用语法,并且我不太确定我做错了什么。

3 个答案:

答案 0 :(得分:11)

您需要的是COALESCE(...) function

SELECT COALESCE(t.Email3, t.Email2, t.Email1) FROM MyTable t

答案 1 :(得分:5)

不需要CASE,你也可以使用COALESCE(“返回其参数中的第一个非空表达式”):

SELECT COALESCE(Email3, Email2, Email1) ...

答案 2 :(得分:2)

请参阅有关COALESCE的其他答案,但如果你真的想要 CASE结构,那么应该这样做:

CASE
  WHEN email3 IS NOT NULL THEN email3
  WHEN email2 IS NOT NULL THEN email2
  WHEN email1 IS NOT NULL THEN email1
  ELSE ''
END

我添加了else子句以防止从整个事件中返回Null,但是如果你想要在所有三个都为Null时发生这种情况你可以使用:

CASE
  WHEN email3 IS NOT NULL THEN email3
  WHEN email2 IS NOT NULL THEN email2
  ELSE email1
END

请注意,SQL Server CASE函数不会丢失案例 - 一旦它匹配一个,就是它。不需要“休息”。