【问题标题】:SQL Case statement SyntaxSQL Case 语句语法
【发布时间】:2009-05-27 14:23:55
【问题描述】:

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

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

【问题讨论】:

  • 考虑改写问题标题以更好地匹配答案

标签: sql-server case


【解决方案1】:

你需要的是COALESCE(...) function:

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

【讨论】:

  • 好电话,虽然我认为提问者需要颠倒论据。
  • 我认为顺序是正确的,但问题的措辞很奇怪。
  • 如果 Email1 和 Email2 都不为空,您的结果将是 Email1,而 OP 要求输入 Email2。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    查看关于 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 函数不会丢弃案例——一旦匹配到一个,就可以了。无需“休息”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2022-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多