2016-03-24 50 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.接受他的回答。否則,你會很粗魯;) –