SQL用sum函数除以零

Mik*_*ike 3 sql sql-server-2008

我遇到了除零的问题.如果分母为零,我希望该值为零.当我尝试使用时nullif,我最终得到零或一个计算值.

这是SQL:

Select 
    StateCode, Month1Date,(Sum(Order)/Sum(Value)) as myValue    
from tblOrders    
     inner join tblStates on OrderStateCode = StateCode    
group by StateCode, Month1Date
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

你需要一个案例陈述:

Select StateCode, Month1Date,
        (case when sum(value) = 0 then 0 else Sum(Order)/Sum(Value)
         end) as myValue
from tblOrders inner join
     tblStates
     on OrderStateCode = StateCode
group by StateCode, Month1Date
Run Code Online (Sandbox Code Playgroud)


Mat*_*lie 5

Select
  StateCode,
  Month1Date,
  ISNULL(Sum(Order) / NULLIF(Sum(Value), 0), 0) AS myValue
from
  tblOrders
inner join
  tblStates
    on OrderStateCode = StateCode
group by
  StateCode,
  Month1Date
Run Code Online (Sandbox Code Playgroud)

0分母被改变成NULL,这将导致resultNULL。然后,整个结果必须ISNULL()将所有NULL都设为0。

就我个人而言,我不会包括,ISNULL()并将结果保留为NULL。但这实际上取决于用例。

编辑:删除了CASE WHEN版本,因为另一个答案就在我的面前。