在这个SQL语句中:
select (ISNULL(Tbl1.Bromod,0) + ISNULL(Tbl1.Bromoform,0) +
ISNULL(Tbl1.Chlor,0) + ISNULL(Tbl1.Dibromoc,0)) / 4 )
from TblTruck
我想动态地将当前值为4的值更改为非NULL
的值。
我想要做的是获得平均忽略NULL条目。
假设Bromod
是NULL
而其他人不是BULL
,我会除以3,因为3实际上有值。
答案 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.总和,它可以为您提供所需的内容。此解决方案还处理除零问题,如果所有值均为零/零,则会出现此问题。