我正在尝试编写一个select语句,它将选择一些字段,包括一个电子邮件字段。此表中有3个电子邮件字段,有时可以包含空值。我想看看3个领域; [电子邮件地址1],[电子邮件地址2],[电子邮件地址3]基本上我想做的是,如果[电子邮件地址3]为空,那么我想要[电子邮件地址2]中的值,如果电子邮件地址2为空,而不是我想要的值在[电子邮件地址1]
我似乎无法正确使用语法,并且我不太确定我做错了什么。
答案 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函数不会丢失案例 - 一旦它匹配一个,就是它。不需要“休息”。