This will become simpler with Firebird 3, which implements windowing functions.
Simple cases can also be possible with older versions and some imagination, e.g. with tmp (Reference, SumDue) as (Select Reference, Sum(Due) From Invoices Group by 1) Select Reference, SumDue, (select sum(SumDue) From tmp t2 where t1.Reference <= t2.Reference) RunningTotal >From tmp t1 Order by 1 Though sometimes this can be time consuming, Set 2015-10-23 8:40 GMT+02:00 Maya Opperman [email protected] [firebird-support] <[email protected]>: > > > Hi, > > > > I’d like to add a running total to my result set. For example: > > > > Table: Invoices > > > > Reference Due > > Invoice1 50.00 > > Invoice2 30.00 > > Invoice3 20.00 > > > > I’m guessing SQL would be something like: > > Select > > Reference, > > Due, > > Sum_Total(Due) as Balance > > From Invoices > > > > Desired Result: > > Reference Due Balance > > Invoice1 50.00 50.00 > > Invoice2 30.00 80.00 > > Invoice3 20.00 100.00 > > > > I know I can do this quite easily from within a selectable stored > procedure, but the problem there is the running total won’t be correct if a > different sort order is specified, which happens often in my real world > application. > > > > Is it possible to do this using just a simple SQL statement? > > > > Thanks > > Maya > > > > > >
