我正在尝试编写一个脚本,显示成员逐年增长。但是我们总是添加或删除成员,所以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个月
答案 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