>我有一个表格,其中有 5 列
Accno ValueDate withdra diposits 余额支付Altkey 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 newbalace1 25000 0 25000 0 250001 500 0 25500 1 250001 0 1000 24500 2 250001 2000 0 26500 0 270001 0 1000 25500 2 270001 2000 0 27500 1 270001 4000 0 29500 0 310001 0 1000 25500 0 30000
首先,你需要有一个描述记录顺序的列,否则你无法真正计算任何东西。然后只需使用 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+,如果您使用的是旧版本,只需检查如何进行汇总。