如果您选择此人的姓氏,则此查询对每个测试用例均适用:
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'
当H.Height为null
或W.Weight为时,这甚至可以工作null
。
不幸的是,一旦我删除该WHERE
子句并尝试为每个人运行它,我就会得到除以零的错误。
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 SERVER 2008-R2)
更改为此:
SELECT P.Patient_ID, P.Person_FirstName, P.Person_LastName
, H.Height
, W.Weight
, CASE
when H.Height != 0 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
NULL!= 0已经为假,因此在这种情况下您将获得null,但对于0您还将获得null。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句