2016-06-28 3 views
0

0 반환하지 않는 나는 다음과 같은 쿼리가 : 선택한 열의 모든 값이 NULL을 때왜 SQL Server는 계산

select 
    (case 
     when try_convert(decimal(3, 1), DEC10assessmentData.writ_literatureReview) is not null 
      then cast(DEC10assessmentData.writ_literatureReview as decimal(3, 1)) 
      else 0 
    end/100 * 4 
    + case 
      when try_convert(decimal(3, 1), DEC10assessmentData.writ_exposition) is not null 
      then cast(DEC10assessmentData.writ_exposition as decimal(3, 1)) 
      else 0 
     end/100 * 8 
    + case 
      when try_convert(decimal(3, 1), DEC10assessmentData.writ_groupReport) is not null 
      then cast(DEC10assessmentData.writ_groupReport as decimal(3, 1)) 
      else 0 
     end/100 * 8 
    + case 
      when try_convert(decimal(3, 1), DEC10assessmentData.writ_synthSummary) is not null 
      then cast(DEC10assessmentData.writ_synthSummary as decimal(3, 1)) 
      else 0 
     end/100 * 8 
    + case 
      when try_convert(decimal(3, 1), DEC10assessmentData.writ_critEvaluation) is not null 
      then cast(DEC10assessmentData.writ_critEvaluation as decimal(3, 1)) 
      else 0 
     end/100 * 12)/40 * 100 
from 
    DEC10assessmentData 

0.800000000을 반환하지를?

열에 점수가 있으면 올바른 결과를 반환합니다.

+0

값이 널인지 여부에 관계없이 100으로 나누고 항상 4 또는 8을 곱하기 때문에 –

+0

@ NazirUllah 대소 문자 구분 여부에 관계없이 case 문에서 0을 반환하지만 무언가를 곱하면 0이어야합니다. – Ben

+0

하나를 제외한 모든 경우를 주석 처리하고 하나씩 주석 처리를 해제하여 실제 문제가 어디에 있는지 확인하십시오. – KumarHarsh

답변

2

여기에서 데모를 만들려고했지만 0.0000이 아니라 이되었습니다. 모든 값이 null입니까?

Null Demo

예, 혼자 각각의 경우 문을 실행 시도하고있는 당신이 출력에 0을 받고 있지되어 표시되는 경우

.

select 
(case when try_convert(decimal(3,1), DEC10assessmentData.writ_literatureReview) 
is not null 
    then 
cast(DEC10assessmentData.writ_literatureReview as decimal(3,1) 
    ) else 0 
end/100 * 4 
)/ 40 * 100 
from DEC10assessmentData 

이 반환은 0 다음 다른 case 문을 추가하고 추가로 선택하면

그래서 처음 실행.