如果您选择该人的姓氏,则此查询适用于每个测试用例:
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 服务器 2008-R2)