【发布时间】:2021-08-04 01:59:09
【问题描述】:
我相信下面的划分是导致 null 的原因,我该如何使用 isNull 之类的东西,返回 0?
以下查询获取每天的总净值,并将该值归因于周六、周日和工作日的一周中的某一天。这个想法是根据工作日或周六或周日获得平均净额。
但由于现在仍处于 8 月初,因此还没有统计周六或周日,因此除以 0 得到平均值反而会导致此错误,我该如何更好地处理这个问题?
--@DespatchFrom = '08-01-2021'
--@DespatchFrom = '08-04-2021'
Select E_SAT.SATNet/E_SAT.SATCount As E_SAT,
E_SUN.SUNNet/E_SUN.SUNCount AS E_SUN,
E_WK.WKNet/E_WK.WKCount AS E_WK
from
(select DateDiff(ww, @DespatchFrom, @DespatchTo) as SATCount,
SUM(CASE WHEN TranType = 'SRT' THEN (Net*-1) ELSE Net END) as SATNet
from trans t
where d t.DespatchDateTime >= (@DespatchFrom) and t.despatchDateTime <= DateAdd(d,1,(@DespatchTo))
and t.cancelleddocket = '0' and t.trantype <> 'DIV'
and DatePart("w",t.Despatchdatetime) = 7)
AS E_SAT,
(select DateDiff(ww, @DespatchFrom, @DespatchTo) as SUNCount,
SUM(CASE WHEN TranType = 'SRT' THEN (Net*-1) ELSE Net END) as SUNNet
from trans t
where t.DespatchDateTime >= (@DespatchFrom) and t.despatchDateTime <= DateAdd(d,1,(@DespatchTo))
and t.cancelleddocket = '0' and t.trantype <> 'DIV'
and DatePart("w",t.Despatchdatetime) = 1)
AS E_SUN,
(select
(DATEDIFF(dd, @DespatchFrom, @DespatchTo) + 1)
-(DATEDIFF(wk, @DespatchFrom, @DespatchTo) * 2)
-(CASE WHEN DATENAME(dw, @DespatchFrom) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @DespatchTo) = 'Saturday' THEN 1 ELSE 0 END) as WKCount
, SUM(CASE WHEN TranType = 'SRT' THEN (Net*-1) ELSE Net END) as WKNet
from trans t
where t.DespatchDateTime >= (@DespatchFrom) and t.despatchDateTime <= DateAdd(d,1,(@DespatchTo))
and t.cancelleddocket = '0' and t.trantype <> 'DIV'
and ((DatePart("w",t.Despatchdatetime) > 1) AND (DatePart("w",t.Despatchdatetime) < 7)))
AS E_WK
【问题讨论】:
-
当值为零时你想发生什么?将值设置为 1(或其他值)以便除法不会出错或将整个计算的结果设置为某个固定值(或完全不同的值)?
-
@NickW 它应该是 0,奇怪的是我的报告已经工作了几个月,突然间我得到了这个除以 0 的错误。
标签: sql reporting-services ssrs-2012 divide-by-zero