在示例中,我想从表 2 中按 组ID
。从第一行中减去的值,如果有余数,则从组中的下一行中减去(依此类推),直到减去总计。
有没有一种方法可以做到这一点而无需遍历行来获取余数?
我的表 1:
TABLE 1 of subtracting value GroupID Subtracted 1 32 2 30
我的表 2:
ID GroupID ValueBefore Reduction ValueAfter 1 1 10 -10 0 2 1 15 -15 0 3 1 5 -5 0 4 1 5 -2 3 5 2 40 -30 10 6 2 30 0 30
最佳答案
我会使用累积总和和一些相对简单的比较:
select t2.*,
(case when t2.running_value - t2.valuebefore < t1.subtracted
then 0
when t2.running_value < t1.subtracted
then t2.running_value - t1.subtracted
else t2.valuebefore
end) as reduction,
(case when t2.running_value < t1.subtracted then 0
else t2.running_value - t1.subtracted
end) as ValueAfter
from (select t2.*,
sum(valuebefore) over (partition by groupid order by id) as running_value
from t2
) t2 join
t1
on t2.groupid = t1.groupid;
关于sql - 更新行组以从行 SQL 的总和中删除特定的总金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111899/