语法返回额外NULL的情况

时间:2019-05-28 22:04:49

标签: sql oracle

我在下面的代码中使用了一个Case When,结果会产生不应存在的额外NULL值。有什么想法我用下面的代码做错了吗?

SELECT distinct
Case when
status_level = 'CLAIM'
AND 
 status = 'CLOSED'
THEN effective_date
END FirstCloseDate
FROM 
STATUS

当前结果是:

+----------------+
| FirstCloseDate |  
+----------------+
| (null)         |  
| 02-JUL-18      |  
+----------------+

结果应该是

+----------------+
| FirstCloseDate |  
+----------------+
| 02-JUL-18      |  
+----------------+

感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

如果没有CASE分支匹配并且没有定义NULL分支,则

WHEN会产生ELSE。因此,对于NULL不满意的记录,您得到status_level = 'CLAIM' AND status = 'CLOSED'

您的预期结果看起来像您只想要满足status_level = 'CLAIM' AND status = 'CLOSED'条件的记录。要过滤记录,请在列列表中使用WHERE子句而不是CASE

SELECT DISTINCT
       effective_date firstclosedate
       FROM status
       WHERE status_level = 'CLAIM'
             AND status = 'CLOSED';

如果要忽略effective_date的{​​{1}},还可以过滤掉它们。

NULL