在存储过程中(我使用的是 SQL server2008),我有这样一个示例的业务:
ID City Price Sold
1 A 10 3
1 B 10 5
1 A 10 1
1 B 10 3
1 C 10 5
1 C 10 2
2 A 10 1
2 B 10 6
2 A 10 3
2 B 10 4
2 C 10 3
2 C 10 4
我想做的是:
对于每个 ID,首先按城市排序。
排序后,对该ID的每一行,从上到下重新计算Sold,条件为:每个ID的Sold总和不超过Price(结果如下)。
结果是这样的:
ID City Price Sold_Calculated
1 A 10 3
1 A 10 1
1 B 10 5
1 B 10 1 (the last one equal '1': Total of Sold = Price)
1 C 10 0 (begin from this row, Sold = 0)
1 C 10 0
2 A 10 1
2 A 10 3
2 B 10 6
2 B 10 0 (begin from this row, Sold = 0)
2 C 10 0
2 C 10 0
现在,我正在使用光标来执行此任务:获取每个 ID,对 City 进行排序,然后计算 Sold,然后保存到临时表。计算完成后,合并所有临时表。但这需要很长时间。
我知道人们建议的是,不要使用光标。
那么,通过这个任务,你能给我一个例子(使用 select form where group)来完成吗?还是我们有其他方法可以快速解决它?
我知道这个任务对你来说并不容易,但我仍然在这里发帖,希望有人帮助我完成。
我非常感谢您的帮助。
谢谢。