1

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

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

4

3 回答 3

11

你需要的是COALESCE(...) 函数

SELECT COALESCE(t.Email3, t.Email2, t.Email1) FROM MyTable t
于 2009-05-27T14:26:12.427 回答
5

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

SELECT COALESCE(Email3, Email2, Email1) ...
于 2009-05-27T14:27:39.567 回答
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 函数不会丢弃案例——一旦匹配到一个,就可以了。不需要“休息”。

于 2009-05-27T14:46:30.340 回答