2016-03-24 126 views
0

我想写一个脚本,显示会员年增长率。然而,我们总是添加或删除成员,因此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 

但是我总是以零除错误结束。我也尝试用其他0替换为我在前面的答案中找到的nullif(0,0),但仍然存在相同的问题。任何援助将不胜感激。

我是菜鸟,我只用了3个月的SQL自我教学

+0

万一“总和(情况下,当TRANDATE DATEADD之间(年,-1,@启动)和DATEADD(年,-1, @end)然后TranAmount else 0 end)-1“为零,这个分区的结果是什么? – FLICKER

回答

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 
+0

完善分母周围的nullif问题。当我删除else 0时,它返回以下消息;警告:空值由集合或其他SET操作消除。感谢您的帮助! – Mesa

+0

@Mesa不要只是感谢他。 G.接受他的回答。否则,你会很粗鲁;) –