このクエリは、人の姓を選択すると、すべてのテスト ケースで正常に機能します。
SELECT P.Patient_ID, P.Person_FirstName, P.Person_LastName
, H.Height
, W.Weight
, CASE
when H.Height is not null then W.Weight / (H.Height * H.Height)
else null
END as BMI
FROM
VIEW_BillPatient P
LEFT JOIN H on P.Patient_ID = H.Patient_ID
LEFT JOIN W on P.Patient_ID = W.Patient_ID
WHERE
P.Person_LastName = 'ZZtest'
これはnull
、H.Height または W.Weight がの場合でも機能しnull
ます。
残念ながら、WHERE
句を外して全員に対して実行しようとするとすぐに、0 による除算のエラーが発生します。
SELECT P.Patient_ID, P.Person_FirstName, P.Person_LastName
, H.Height
, W.Weight
, CASE
when H.Height is not null then W.Weight / (H.Height * H.Height)
else null
END as BMI
FROM
VIEW_BillPatient P
LEFT JOIN H on P.Patient_ID = H.Patient_ID
LEFT JOIN W on P.Patient_ID = W.Patient_ID
エラー:
Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.
(サブクエリ H と W はそれぞれ、Patient_ID と、データベース内の身長または体重の最後の値を返します。通常は複数記録されているためです (見つからない場合は null)。式は、表示されている体格指数を計算することです。コード内)
私は何を間違っていますか?(MS SQL サーバー 2008-R2)