2016-06-28 5 views
0

私は次のクエリを持っている:選択した列のすべての値がNULLあるときはなぜSQL Serverは、計算のために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 
    + 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

コメントはすべて1つを除いてコメントを外し、実際に問題がどこにあるかを確認します。 – KumarHarsh

答えて

2

ここでデモを作成しようとしましたが、0.0000ではなくとなっています。すべての値がnullであることを確認してください。

Null Demo

はい場合は、単独の各case文を実行してみてください、あなたは出力に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文を追加し、さらにチェック場合

だから、最初の実行。

関連する問題