Sql 当报告不';不要求两个字段,它开始被零除
我对这两种说法有意见 因为当报表不询问列“Invboxamount”或/和freebox时,整个查询将返回一个错误,即它决定“零除错误” 当询问这两列时,我应该做些什么来避免影响整个查询 也许有更好的方法来写这个Sql 当报告不';不要求两个字段,它开始被零除,sql,Sql,我对这两种说法有意见 因为当报表不询问列“Invboxamount”或/和freebox时,整个查询将返回一个错误,即它决定“零除错误” 当询问这两列时,我应该做些什么来避免影响整个查询 也许有更好的方法来写这个 sum (Case when bm.CaseQTY IS NULL then (k.postedqty / mm.CaseQTY) else (k.postedqty / bm.CaseQTY) End) as Invboxamount, sum (Case when bm.
sum (Case when bm.CaseQTY IS NULL then (k.postedqty / mm.CaseQTY) else (k.postedqty / bm.CaseQTY) End)
as Invboxamount,
sum (Case when bm.CaseQTY IS NULL then ((k.postedqty-k.reservordered-k.reservphysical-k.picked+k.registered) / mm.CaseQTY) else ((k.postedqty-k.reservordered-k.reservphysical-k.picked+k.registered) /bm.CaseQTY) End)
as Freebox
在每个分母出现的情况下,将
CaseQTY
替换为coalesce(CaseQTY,1)
,例如
sum (Case when bm.CaseQTY IS NULL then
(k.postedqty / coalesce(mm.CaseQTY,1))
else (k.postedqty / coalesce(bm.CaseQTY,1))
end) as Invboxamount,
sum (Case when bm.CaseQTY IS NULL then
((k.postedqty-k.reservordered-k.reservphysical-k.picked+k.registered)
/ coalesce(mm.CaseQTY,1) )
else
((k.postedqty-k.reservordered-k.reservphysical-k.picked+k.registered)
/ coalesce(bm.CaseQTY,1) )
end) as Freebox
一些示例数据在这里非常有用。显然,
CaseQTY
字段中的一个(或两个)为零(顺便说一下,这与NULL
不同)。在这种情况下,您希望从查询中得到什么结果?一个明显的选择是返回NULL
,但这取决于您的需求。请详细说明。在库存软件中,将x/0
映射到x
通常是可以的;若分母为零,则分子通常为零。但是你在这里踩着薄冰。我肯定不会将此推广到所有可能的应用程序。我倾向于在即将被零除时产生NULL
。