2013-04-29 1 views
2

제로로 나누기 오류에서 다음 문장을 보호하고자합니다. 이것을 어떻게 할 수 있습니까?SQL - SUM - 사례 - 제로 오류로 나누기

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 
) 
+0

사용 'WHERE EXISTS' 분모가 아닌 0이됩니다 있는지 확인하는 - 경우는하지 않습니다에 해당 행을 선택하지 마십시오 ~로 시작하십시오. – Patashu

+2

음, 분모에서 0의 기본값을 설정하는 것은 0으로 나누기 오류를 얻는 확실한 방법입니다. 이 게시물을 참조하십시오 : http://stackoverflow.com/questions/861778/how-to-avoid-the-divide-by-zero-error-in-sql – Volvox

+0

감사합니다. 나는 0 대신에 NULL을 추가했고 현재는 작동합니다. 사업부가 0을 원한다고 불평 할 때까지 그런 다음 드로잉 보드로 돌아갑니다. 적어도 지금은 사장님이 행복합니다. –

답변

2

이 도움이 될 수 있습니다 :

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 절은 추가 누락 잘 작동합니다.

물론 쿼리 최적화 프로그램의 기능에 따라 this 기능이 실행될 수도 있습니다.

0

당신은 여기에 언급 된 NULLIF 방법을 사용할 수 있습니다 how to avoid divide by zero error

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) 
)