逐行更新

时间:2016-05-17 09:28:37

标签: sql-server sql-update sql-server-2014

我想逐行更新,但在更新当前行后再次为每行评估上下文。

示例:

ID   Type       Count   Lag     Lead      FirstNotZero  Calculate (CASE)
 1   Ad-Aware   438584  438541  438602    438584        438584  
 2   Ad-Aware   438602  438584  0         438602        438602  
 3   Ad-Aware   0       438602  0         438602        438602
 4   Ad-Aware   0       0       0         438602        438602      
 5   Ad-Aware   0       0       0         438602        438602      
 6   Ad-Aware   0       0       438746    438602        438602      
 7   Ad-Aware   438746  0       438782    438746        438746  
 8   Ad-Aware   438782  438746  438806    438782        438782

我想用计算值替换所有0值。应该用这个逻辑来计算:

CASE
WHEN Count = 0 AND Lag != 0 AND Lead != 0 THEN ( Lag + Lead ) / 2
ELSE FirstNotZero
END

因此,当Count = 0 and Lag and Lead values are known时,应计算滞后和铅的平均值。

我现在需要做的是获取一行,评估计算并在适当的时候更新,因此逐行更新。

这里的问题是ID为6的行。一旦计算了第5行,第6行的滞后就会知道。因此,计算结果应该是483674 [(438602 + 438746)/ 2]而不是现在的438602

如何使用逐行逻辑执行此类更新?也许与CURSOR UPDATE

1 个答案:

答案 0 :(得分:0)

您应该知道下一行计数和第一行不等于0并使用它们进行计算。可能您需要使用OUTER APPLYISNULL检查{{1}如果您的第一行或最后一行计数为零,则{}}和lag类似{。}}。

lead

输出:

ISNULL(lag, 0) + ISNULL(lead, 0)