猿问

计算运行总量/运行余额

计算运行总量/运行余额

我有张桌子:

create table Transactions(Tid int,amt int)

5行:

insert into Transactions values(1, 100)insert into Transactions values(2, -50)insert into Transactions values(3, 100)insert into Transactions values(4, -100)insert into Transactions values(5, 200)

期望产出:

TID  amt  balance--- ----- -------1    100   1002    -50    503    100   1504   -100    505    200   250

基本上,对于第一次记录,余额将是相同的amt,第二个余额将是先前余额+当前余额的加法。amt..我正在寻找一种最佳的方法。我可以考虑使用函数或相关子查询,但不确定具体如何实现。


慕运维8079593
浏览 494回答 3
3回答

慕标5832272

如果您使用2012版本,下面是一个解决方案select&nbsp;*,&nbsp;sum(amt)&nbsp;over&nbsp;(order&nbsp;by&nbsp;Tid)&nbsp;as&nbsp;running_total&nbsp;from&nbsp;Transactions用于早期版本select&nbsp;*,(select&nbsp;sum(amt)&nbsp;from&nbsp;Transactions&nbsp;where&nbsp;Tid<=t.Tid)&nbsp;as&nbsp;running_total&nbsp;from&nbsp;Transactions&nbsp;as&nbsp;t

冉冉说

我们在2008 R2上,我使用变量和临时表。这还允许您在使用case语句计算每一行时执行自定义操作(例如,某些事务的操作可能有所不同,或者您可能只想要特定事务类型的总数)。DECLARE&nbsp;@RunningBalance&nbsp;int&nbsp;=&nbsp;0SELECT&nbsp;Tid,&nbsp;Amt,&nbsp;0&nbsp;AS&nbsp;RunningBalanceINTO&nbsp;#TxnTableFROM&nbsp;TransactionsORDER&nbsp;BY&nbsp;TidUPDATE&nbsp;#TxnTableSET&nbsp;@RunningBalance&nbsp;=&nbsp;RunningBalance&nbsp;=&nbsp;@RunningBalance&nbsp;+&nbsp;AmtSELECT&nbsp;*&nbsp;FROM&nbsp;#TxnTableDROP&nbsp;TABLE&nbsp;#TxnTable我们有一个有230万行的事务表,其中一个项有超过3,300个事务,并且对它运行这种类型的查询根本不需要花时间。
随时随地看视频慕课网APP
我要回答