首页 > 解决方案 > CASE WHEN 比较解析为 NULL

问题描述

写这个的最好方法是什么?

我正在使用 CASE WHEN 语句处理几个场景。当两者和学校都匹配时,返回 1。如果没有匹配,则匹配名称和学校 = NULL 并返回 2。如果仍然不匹配,则返回 0。

IE:

CASE WHEN  (x.name = x.name and x.school = y.school) THEN 1
WHEN (x.name = x.name and x.school = compare and resolve to null if not matched) THEN 2
ELSE 0

问题 1:如何写第 2 行。——我想我已经解决了这个问题。

  CASE WHEN  (x.name = x.name and x.school = y.school) THEN 1
  WHEN (x.name = x.name and y.school is null) THEN 2
  ELSE 0

问题 2:一旦我弄清楚如何编写第 2 行的比较,分支 2 的真正解决方案将需要选择 2 个空学校值的最低层。在下图中,假设 name 和 school 不匹配,因此逻辑转到分支 2 比较(name 和 school 为空)。在这种情况下,组合有两种可能性 - 第 2 层和第 3 层。如何编写 THEN 参数来为分支 2 选择 twe 的最低层?

姓名


标签: sqlnullcomparecase

解决方案


这是你想要的吗?

case 
    when x.name = y.name and x.school = y.school then 1 
    when x.name = y.name and x.school is null and y.school is null then 2 
    else 0
end

如果两者都匹配,则第一个分支name成功school。第二个匹配names 相等且两个schools 都有null值。


推荐阅读