我有一张表,其中有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
答案 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+,如果您使用的是旧版本,请检查如何运行总计。