我在下面的代码中使用了一个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 |
+----------------+
感谢您的任何帮助!
答案 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