案例陈述嵌入在NVL中

时间:2017-01-25 19:49:29

标签: sql oracle

我试图将以下逻辑设置为除数。我需要使用NVL()来避免除以零错误。我需要对案例陈述进行明确的计算。

这就是我所拥有的:

(NVL(COUNT(DISTINCT 
           CASE WHEN ({field1} = 'a' OR {field1} = 'b' OR 
                      {field1} = 'c' OR {field1} = 'd') AND 
                      ({field2} = 'a' OR {field2} = 'b') AND 
                      ({field3} > TO_DATE('01-JAN-2017', 'DD-MON-YYYY'))
                THEN 1 END), 1))

我的语法有问题,但无法解决。

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我将大量IN更改为更简单的COUNT(DISTINCT CASE WHEN field1 IN ('a','b','c','d') AND field2 IN ('a','b') AND field3 > TO_DATE('01-JAN-2017', 'DD-MON-YYYY') THEN 1 END)

COUNT(DISTINCT ...)

NVL不会返回null,因此删除了多余的COUNT( CASE WHEN field1 IN ('a','b','c','d') AND field2 IN ('a','b') AND field3 > TO_DATE('01-JAN-2017', 'DD-MON-YYYY') THEN 1 END)

现在,上面的结果是0或1。

你可能想要这个没有区别:

case when (expression) <> 0  then dividend/(expression) end

因为它是一个除数,所以它不能为0,所以你必须为此设置保护措施。除数为0时的一个合理输出为空。实现这一目标的一种方法是:

{{1}}