我想逐行更新,但在更新当前行后再次为每行评估上下文。
示例:
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
?
答案 0 :(得分:0)
您应该知道下一行计数和第一行不等于0并使用它们进行计算。可能您需要使用OUTER APPLY
和ISNULL
检查{{1}如果您的第一行或最后一行计数为零,则{}}和lag
类似{。}}。
lead
输出:
ISNULL(lag, 0) + ISNULL(lead, 0)