2012-11-23 38 views
0

我有一个存储过程,它根据参数计算几个值的平均值。在计算平均值时处理NULL值

这里的代码片段:

WHILE @@FETCH_STATUS = 0 
BEGIN    
    SELECT 
     @valFound = AVG(FilterSurface) 
    FROM 
     [tblVAR_FilterSurface] 
    WHERE 
     refDate >= DATEADD(DAY, -30, @refDate) 
     AND refDate <= DATEADD(DAY, 0, @refDate) 
     AND patientId = @patientId 

    INSERT INTO __TEMP(PatientId, RefDate, ModifyDate, FilterSurface) 
    VALUES(@patientId, @refDate, @modifyDate, @valFound); 

    SET @valFound = NULL 

    FETCH NEXT FROM db_cursor INTO @patientId, @refDate, @modifyDate 
END 

有时因为系统尝试计算NULL值的平均值和结果分配给@valFound可变此存储过程失败。我认为问题是将结果分配给这些变量。

如何修改我的存储过程以正确处理空值?

回答

2

要么改变选择到@valFound = AVG(ISNULL(FilterSurface,0))或改变where子句包括和FilterSurface不为空,这取决于如果你想算零点零或排除他们