我有一个类似这样的SQL语句
SELECT t1.*
CASE
WHEN t1.COL1 = 0 THEN 0
WHEN
(t1.COL2 = 'val' OR t1.COL3 = 'val' etc) AND ((SELECT COUNT(*) FROM t1 WHERE etc...) > 0)
THEN Run same sub query
WHEN
something else
THEN defaultvalue
END as brokencase
现在,上面的第二个WHEN语句,当单独运行时,返回零。但是当它在这里运行时,我得到一堆空值,因为该语句以某种方式返回true。
那么为什么count语句返回零,但WHEN语句认为它是真的?出于隐私原因,我在这里遗漏了很多细节,但这是一般性问题。
答案 0 :(得分:1)
通常当我看到这个时,程序员在他们的语句中缺少ELSE或DEFAULT案例。要找出您没有捕获的场景,请设置如下选项:
SELECT DISTINCT columnTested1,columnTested2,columnTestedX,case语句 从blah
显示所有正在测试的列,然后是您的情况,您将在结果中看到的是导致您的NULL的列的组合。您需要在案例陈述中捕获这些内容,否则您将继续错过这些选项
在不同选项中测试不同的列时,可能需要多个else语句来捕获它们。一旦确定了导致问题的列组合,就很难修复case语句。
答案 1 :(得分:1)
如果要排除具有空值的结果,则必须确保在WHEN
条件下检查结果。您尚未在计数查询中指定WHERE
子句,因此我无法确定这是否是问题所在。它看起来像这样:
SELECT COUNT(*) FROM t1 WHERE ExcludeValue IS NOT NULL