用SQL除以零

ajspacemanspiff

如果您选择此人的姓氏,则此查询对每个测试用例均适用:

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)

布赖恩·阿苏阿加(Brian Arsuaga)

更改为此:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章