我创建了一个脚本,该脚本在select语句中执行一些公式。
SUM(PMCLY.[Net Sale LY]/(PMC.[Net Sales] - PMCLY.[Net Sale LY])) AS 'VAR Vs LY %'
运行脚本时,出现以下错误:
除以零错误。
当值为0时,如何显示却只显示0呢?
答案 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 %'