sql-server - SQL Server 能否为临时表返回错误的顺序?
问题描述
我在生产中有一个奇怪的问题,我无法在本地开发中重现。请注意,我们有两个基于相同数据库运行的应用程序,但它们返回不同的数据(旧应用程序是正确的)
我有如下一行
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 表表示无序集,因此需要一列来指定排序。
推荐阅读
- arrays - 如何在 Google 电子表格中使用数组作为 FILTER 函数的输入?
- php - 小写所有没有 foreach 的关联数组键
- jpa - 具有两个属性的 JPA 映射。是否可以在 mappedBy 中包含两列(属性)?
- spring - refresh_token grant_type 错误:需要 UserDetailsService。但我不想指定一个
- uml - 通过关联访问其他类的属性应该是显式的还是隐式的?
- php - ntr设置刀片Laravel中从数据库中选择的值
- c++ - 我找不到什么问题。mojibake, unicode
- angular6 - 如何在角度7中设置下拉值
- android-studio - 我更改了编码文件,但文件内容更改为符号我想恢复文件内容
- listview - 如何在 tvOS 中使 SwiftUI 列表可滚动