SQL Server-根据先前行的动态数求和

时间:2018-07-13 10:00:26

标签: 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中的值不同时,我都会开始新的计算)

我需要通过两种方式做到这一点:

第一:

如果A列中的值的总和大于B列中的值,我需要将A列中的当前值分成2行。

在第一行中,它将是相同的ID,而A值将是B列与先前的SUM(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中最优化的方法吗?

谢谢

0 个答案:

没有答案