sql - 更新行组以从行 SQL 的总和中删除特定的总金额

标签 sql sql-server sql-update sql-server-2014

在示例中,我想从表 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/

相关文章:

SQL Server批量更新触发器执行

mysql - 为什么此 MySQL 插入会因外键约束错误而失败?

sql - 如何检查WITH语句是否为空

sql - 更新多行时出现错误 "duplicate key value violates unique constraint"

sql - PL/pgSQL 函数在 pgAdmin 之外无法正确运行

php - 在str_replace中使用sql查询

mysql:用与前一行相同的数字更新增量序列号

sql - 如何通过ssms中的select插入值?我尝试时遇到错误

mysql - 如何发现 RDBMS 中的关系?

php - 这个查询有什么问题?我正在尝试根据第二个表中列的值更新列值