获得平均字段

时间:2014-06-24 18:14:25

标签: sql sql-server

在这个SQL语句中:

select (ISNULL(Tbl1.Bromod,0) + ISNULL(Tbl1.Bromoform,0) +  
   ISNULL(Tbl1.Chlor,0)  + ISNULL(Tbl1.Dibromoc,0)) / 4 ) 
   from TblTruck

我想动态地将当前值为4的值更改为非NULL的值。

我想要做的是获得平均忽略NULL条目。

假设BromodNULL而其他人不是BULL,我会除以3,因为3实际上有值。

1 个答案:

答案 0 :(得分:0)

select (
    ISNULL(Tbl1.Bromod,0) + ISNULL(Tbl1.Bromoform,0) +  ISNULL(Tbl1.Chlor,0)  + ISNULL(Tbl1.Dibromoc,0)
)
/ ISNULL(
    NULLIF(
        CONVERT(INT,CONVERT(BIT,ISNULL(Tbl1.Bromod,0))) + CONVERT(INT,CONVERT(BIT,ISNULL(Tbl1.Bromoform,0))) +  CONVERT(INT,CONVERT(BIT,ISNULL(Tbl1.Chlor,0)))  + CONVERT(INT,CONVERT(BIT,ISNULL(Tbl1.Dibromoc,0)))
        ,0
    )
        ,1
    )
from TblTruck Tbl1

所以,巧妙的技巧,除了零之外的所有#s在转换为时都转换为true。因此,NULL和0&#39变为零,所有其他值变为1.总和,它可以为您提供所需的内容。此解决方案还处理除零问题,如果所有值均为零/零,则会出现此问题。