2011-08-04 5 views
4
SELECT ((CASE WHEN (qid2.AgeBelow_16 - qid1.AgeBelow_16)= 0 THEN 1 ELSE (qid2.AgeBelow_16- qid1.AgeBelow_16) END)/ (CASE WHEN [qid1].AgeBelow_16= 0 THEN 1 ELSE [qid1].AgeBelow_16 END))*100 AS AgeBelow_16_Percent, 
    -- otherfields 

    FROM 
    -- whole query 

이전 값과 새 값의 백분율 차이를 계산할 때 위의 쿼리를 사용하고 있습니다. 주요 문제가 거기 어떤 필드 값이 0이라면 "0으로 나누기 오류가 발생했습니다"라는 오류가 발생하므로 을 사용하고 다른 경우는으로 끝납니다. 위의 구현이 좋았거나 더 좋을 수 있습니다. 제발 제안하십시오. 왜냐하면 필드가 위와 같이 커질 때 더 혼란 스럽기 때문입니다.핸들 "0으로 오류로 나누기 오류가 발생했습니다"

답변

4

이와 비슷한 것일 수 있습니다.

declare @X int = 0 
select 10/isnull(nullif(@X, 0), 1) 
+0

성능은 위와 같습니까? –

+1

@Govind KamalaPrakash Malviya : 꼭 그렇지는 않겠지 만, 그렇지 않다면 나는 그 차이가 본질적이지 않을 것이라고 기대합니다. 하지만 아마 스스로 벤치마킹해야합니다. 또는 ISNULL 대신 COALESCE를 사용하여 더 잘 (더 빨리) 작동하는지 확인할 수 있습니다. –

+0

@Govind - 정말 느린 노트북과 Andriy에서 100000 행에 대한 빠른 테스트를 수행 했습니까? 약 50 ms의 시간차로 2.7 초가 걸렸습니다. –

관련 문제