2010-06-01 4 views
1

아래 줄과 비슷한 코드를 사용하여 저장 프로 시저에서 일정 비율의 데이터를 가져 오려고합니다. 분명히이 문제는 base. [XXX_DataSetB]가 0을 반환 할 때 (0으로 나누는 오류로 인해 발생하는) 문제를 일으킬 수 있습니다.T-SQL 2005 - 0으로 나누기 오류가 발생했습니다.

아무도 내가 가장 효율적인 방식으로 어떻게 처리 할 수 ​​있는지 알고 있습니까?

참고 : ... 아래와 같은보고에 대한 20 개 이상의 행이있을 것

cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal)/
          base.[XXX_DataSetB] as [XXX_Percentage] 
나는 바닥 용어 대신 null의 제로하여 null로 평균을 강제 것

답변

2

XXX_DataSetB가 0 일 때 예상되는 동작에 따라 달라집니다.

오류가 발생할 수있는 행을 반환하지 않으려면 where XXX_DataSetB <> 0을 쿼리에 추가하여 해당 행을 쉽게 필터링 할 수 있습니다.

당신은 다음과 같은 경우 문, 또는 뭔가 사용할 수 NULL로 문제 행을 원하는 경우 :

cast(([XXX_DataSetB] - [XXX_DataSetA]) as decimal)/nullif([XXX_DataSetB], 0) 
1

:

cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal) 
    /case when base.[XXX_DataSetB] = 0 then null 
     else base.[XXX_DataSetB] end as [XXX_Percentage] 
관련 문제