在今年与去年相比时,避免除以零误差

时间:2016-03-24 21:44:26

标签: sql sql-server

我正在尝试编写一个脚本,显示成员逐年增长。但是我们总是添加或删除成员,所以LY可能不存在。我尝试使用的脚本是;

select
DBA as 'Retailor',
sum(case when TranDate between @start and @end then TranAmount else 0 end)/
sum(case when TranDate between dateadd(year, -1, @start) and dateadd(year, -1, @end) then TranAmount else 0 end) -1

然而,我总是以零除错误结束。我也尝试用nullif(0,0)替换else 0,我在之前的回答中找到了但仍然有相同的问题。非常感谢任何帮助。

我是一名新手,我只是通过自学教学使用SQL 3个月

1 个答案:

答案 0 :(得分:0)

您的最简单方法是简单地删除分母中的else 0

(sum(case when TranDate between @start and @end then TranAmount else 0 end)/
 sum(case when TranDate between dateadd(year, -1, @start) and dateadd(year, -1, @end)
          then TranAmount 
     end) - 1

如果没有匹配则假设TranAmount is always greater than 0, this will return为NULL。

如果没有这种简单的改变,下一个最简单的方法是NULLIF()

(sum(case when TranDate between @start and @end then TranAmount else 0 end)/
 nullif(sum(case when TranDate between dateadd(year, -1, @start) and dateadd(year, -1, @end)
                 then TranAmount 
            end), 0) - 1