当一个结果的值为0时SQL中的公式问题

时间:2018-12-19 10:00:31

标签: sql sql-server tsql

我创建了一个脚本,该脚本在select语句中执行一些公式。

SUM(PMCLY.[Net Sale LY]/(PMC.[Net Sales] - PMCLY.[Net Sale LY])) AS 'VAR Vs LY %'

运行脚本时,出现以下错误:

  

除以零错误。

当值为0时,如何显示却只显示0呢?

3 个答案:

答案 0 :(得分:1)

您要检查除法的分母是否为零,并在这种情况下返回NULL。这也将导致除法也返回NULL,这很可能是您想要的。

在不知道您的RDBMS的情况下,这是一种依赖于CASE语句的实现,大多数(如果不是全部)SQL服务器都支持该语句。

SUM(PMCLY.[Net Sale LY]/(
    CASE WHEN PMC.[Net Sales] - PMCLY.[Net Sale LY] = 0 
    THEN NULL 
    ELSE PMC.[Net Sales] - PMCLY.[Net Sale LY]
    END
)) AS 'VAR Vs LY %'

如果您的RDBMS支持NULLIF,则:

SUM(PMCLY.[Net Sale LY]/(
    NULLIF( PMC.[Net Sales] - PMCLY.[Net Sale LY], 0)
)) AS 'VAR Vs LY %'

答案 1 :(得分:0)

这将起作用:

SELECT case when mod((5/(decode(0,0,5,1))),1) = 0 then 0 else (5/(decode(0,0,5,1))) end 
FROM dual;
0

SELECT case when mod((5/(decode(2,0,5,2))),1) = 0 then 0 else (5/(decode(2,0,5,2))) 
end 
FROM dual;
 2.5

针对您的情况:

SELECT sum(case when mod((PMCLY.[Net Sale LY]/(decode((PMC.[Net Sales] - 
PMCLY.[Net Sale LY],0,5,(PMC.[Net Sales] - PMCLY.[Net Sale LY]))),1) = 0 
then 0 else (5/(decode((PMC.[Net Sales] - PMCLY.[Net Sale LY],0,5,(PMC.[Net 
Sales] - PMCLY.[Net Sale LY])))) end 
FROM tablename;

答案 2 :(得分:0)

U可以结合使用NULLIF和ISNULL函数。 NULLIF可用于防止被零除的错误。 ISNULL可以包装在外面,以在这种情况下设置默认值。在您的情况下,该值为0。

类似这样的东西:

SELECT ISNULL (10 / NULLIF (0, 0) , 0)  -- result = 0

您的代码示例如下所示:

ISNULL (SUM (PMCLY.[Net Sale LY] / NULLIF ( (PMC.[Net Sales] - PMCLY.[Net Sale LY]), 0 ) ), 0) AS 'VAR Vs LY %'