2016-03-24 13 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 

しかし、私はゼロで除算することになります。私は以前の答えで見つけたがまだ同じ問題があるnullif(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 

と仮定すると:

私は、私はあなたのケースでは、最も簡単な方法がある

+0

「の合計(ケースTranDate DATEADD(年、-1、@start)とDATEADD(年、-1の間、 @end)then TranAmount else 0 end)-1 "は0で、その除算の結果はどうなりますか? – FLICKER

答えて

0

は単に分母のelse 0を削除するために、自己の指導により3ヶ月間のSQLをルーキー使用されていています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

分母の周りのヌルフルを完璧に出すことができます。 else 0を削除すると、次のメッセージが返されました。警告:Null値は、集計または他のSET操作によって削除されます。ご協力ありがとうございました! – Mesa

+0

@Mesa彼に感謝するだけではありません。 G.彼の答えを受け入れる。それ以外の場合は、あなたは一種の失礼です;) –