平衡计算

时间:2016-02-20 07:00:19

标签: sql sql-server

我有一张表,其中有5列

accno  valuedate withdra diposits balance paymentaltkey  
1     2015-01-01  25000    0     25000    0  
1     2015-01-02  500      0      25500     1  
1     2015-01-03   0      1000    24500   2  
1     2015-01-03  2000      0     26500    0  
1     2015-01-04   0      1000     25500    2  
1     2015-01-05  2000      0     27500    1  
1     2015-01-06   4000     0     29500    0  

现在我需要计算新余额,如果paymentaltkey = 1,那么我们就不会在余额中添加withdra。如果paymentaltkey = 2,那么我们不会减去deposit

如何创建这样的新余额输出:

accno  withdra diposits balance payme    newbalace
1       25000      0      25000    0       25000
1         500      0      25500    1       25000
1           0   1000      24500    2       25000 
1        2000      0      26500    0       27000
1           0   1000      25500    2       27000
1        2000      0      27500    1       27000
1        4000      0      29500    0       31000
1           0   1000      25500    0       30000 

1 个答案:

答案 0 :(得分:2)

首先,您需要一个描述记录顺序的列,否则您无法真正计算任何内容。然后用case语句做一个运行总计,如下所示:

select *,
  sum(case when paymentaltkey = 1 then 0 else [withdra] end 
    - case when paymentaltkey = 2 then 0 else [diposits] end) 
         over (partition by [accno] order by yourorderingcolumn) as [newbalace]
from
  yourtable

这适用于SQL Server 2012+,如果您使用的是旧版本,请检查如何运行总计。