小编典典

将值减去多行

sql

好吧,我陷入了需要在多个行之间分配值的问题。由于我不知道具体术语,因此我将以下面的示例形式进行介绍,以便更好地理解:

假设x的值为20,我需要按降序将其分配/减去到行中。

桌子:

ID        Value1 
1          6             
2          5
3          4
4          3
5          9

结果应类似于:(x = 20)

ID        Value1     Answer
1          6           14    
2          5           9
3          4           5
4          3           2
5          9           0

谁能给我一个主意,我该怎么做?


阅读 173

收藏
2021-04-14

共1个答案

小编典典

以不同的方式考虑这个问题也许更容易。您要计算的总和,value1然后从中减去该值@X。如果差异为负,则输入0

如果您使用的是SQL Server 2012,则您具有内置的累计总和。您可以这样做:

select id, value1,
       (case when @X - cumvalue1 < 0 then 0 else @X - cumvalue1 end) as answer
from (select id, value1,
             sum(value1) over (order by id) as cumvalue1
      from table t
     ) t;

如果您没有累积总和,则可以使用子查询来代替:

select id, value1,
       (case when @X - cumvalue1 < 0 then 0 else @X - cumvalue1 end) as answer
from (select id, value1,
             (select sum(value1)
              from table t2
              where t2.id <= t.id
             ) as cumvalue1
      from table t
     ) t;
2021-04-14