Sql server SQL-大小写除零错误
我想保护下面的语句不受零除错误的影响。我怎样才能做到这一点Sql server SQL-大小写除零错误,sql-server,tsql,Sql Server,Tsql,我想保护下面的语句不受零除错误的影响。我怎样才能做到这一点 SELECT [MyColumn] = sum( case when v.Process_FundingDt between @begDt and @endDt and v.Loan_Purpose_Desc = 'PURCHASE' then v.Loan_LoanAmt else 0 end ) / sum ( case when v.Process_FundingDt
SELECT [MyColumn] = sum(
case when v.Process_FundingDt
between @begDt and @endDt
and v.Loan_Purpose_Desc = 'PURCHASE'
then v.Loan_LoanAmt
else 0
end
) / sum (
case when v.Process_FundingDt
between @begDt and @endDt
then v.Loan_LoanAmt else 0
end
)
这可能有助于:
select [MyColumn] = case when Denominator = 0 then NULL else Numerator / Denominator end
from (
select sum(
case when v.Process_FundingDt between @begDt and @endDt and v.Loan_Purpose_Desc = 'PURCHASE' then v.Loan_LoanAmt
else 0 end ) as Numerator,
sum (
case when v.Process_FundingDt between @begDt and @endDt then v.Loan_LoanAmt
else 0 end ) as Denominator
) as Edgar
如果添加了缺少的FROM
子句,它可能会更有效
当然,根据查询优化器的操作,它可能会与功能冲突。您可以使用此处提到的NULLIF方法:
使用
WHERE EXISTS
查看分母是否为非零-如果不是,请不要选择该行作为开始。好的,在分母中设置默认值零是获得除零错误的可靠方法。看到这个帖子:谢谢你们。我添加了NULL而不是零,现在它可以工作了。直到业务部门抱怨他们希望看到零。然后回到绘图板上。但至少现在我的老板很高兴。顺便说一句,在发布这个问题之前,我关注了38号帖子。在我的情况下,如果没有语法错误,我无法对语句进行求值。
SELECT [MyColumn] = sum(
case when v.Process_FundingDt
between @begDt and @endDt
and v.Loan_Purpose_Desc = 'PURCHASE'
then v.Loan_LoanAmt
else 0
end
) / NULLIF(sum (
case when v.Process_FundingDt
between @begDt and @endDt
then v.Loan_LoanAmt else 0
end, 0)
)