我有这种数据集。
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中最优化的方法吗?
谢谢