我在生产方面有一个奇怪的问题,我无法在本地开发中重现。请注意,我们有两个基于相同数据库运行的应用程序,但它们返回不同的数据(旧应用程序是正确的)
我有如下一行
UPDATE #ResultTempTable
SET @@beginningBal = CLoanBal = @@beginningBal + NetChange
这样做的目的是按日期浏览行并计算一段时间内的贷款余额。
我遇到的问题是它从另一侧开始计算。我的临时表按DESC
排序,但计算是根据ASC
顺序开始的。
有什么明显的东西可能会脱颖而出吗?在测试生产方面,我受到限制。
这是做你想做的事的错误方法。 正确的方法是使用窗口函数:
WITH toupdate as (
SELECT rtt.*,
SUM(NetChange) OVER (ORDER BY ?) as RunningNetChange
FROM #ResultTempTable rtt
)
UPDATE toupdate
SET CLoanBal = @beginningBal + RunningNetChange;
?
用于指定表顺序的列。 SQL 表表示无序集,因此需要一列来指定排序。