Sql server SQL Server-根据前一行的动态数量计算总和

Sql server SQL Server-根据前一行的动态数量计算总和,sql-server,optimization,sum,Sql Server,Optimization,Sum,我有那种数据集 ID A B ----------- 1 5 20 2 4 20 3 14 20 4 4 20 5 20 30 6 15 30 7 10 30 8 6 30 9 4 30 10 10 30 我的任务是使用ID顺序对A列中的值求和,直到不大于B列中的值为止。(每次B中的值不同时,我开始新的计算) 我需要用两种方法来做: 第一: 如果一列中的值的运行总和大于B列中的值,我需要将一列中的当前值拆分为两行 在第

我有那种数据集

ID  A   B
-----------
1    5  20 
2    4  20
3   14  20
4    4  20
5   20  30
6   15  30
7   10  30
8    6  30
9    4  30
10  10  30
我的任务是使用ID顺序对A列中的值求和,直到不大于B列中的值为止。(每次B中的值不同时,我开始新的计算)

我需要用两种方法来做:

第一:

如果一列中的值的运行总和大于B列中的值,我需要将一列中的当前值拆分为两行

在第一行中,它将是相同的ID,一个值将是B列和上一个总和(A)之间的差值

在第二行中,相同ID将显示原始A值与前一行值之间的差异

看看这个例子:

ID  A   B  SumA SumA_ID
------------------------
1    5  20  20  1
2    4  20  20  1
3   11  20  20  1
3    3  20   7  2
4    4  20   7  2
5   20  30  30  1
6   10  30  30  1
6    5  30  30  2
7   10  30  30  2
8    6  30  30  2
9    4  30  30  2
10   5  30  30  2
10   5  30   5  3
第二:

每次当前和A大于当前值B时,我开始再次求和

ID  A   B  SumA SumA_ID
------------------------
1    5  20   9  1
2    4  20   9  1
3   14  20  19  2
4    4  20  19  2
5   20  30  20  1
6   15  30  25  2
7   10  30  25  2
8    6  30  20  3
9    4  30  20  3
10  10  30  20  3
由于数据集很大,我不喜欢使用循环

您能推荐在SQL Server中执行此操作的最佳方法吗


谢谢

格式化您的示例数据将非常有用。我希望现在更好。