At lave en løbende saldo/sum/total er ikke noget SQL er særligt god til. Der er nogle muligheder, men de er ikke gode eller effektive, så jo flere rækker du har i din tabel, jo mere "bløder" du.
Som regel vil det være bedre at lave denne opsummering i dit program efterhånden som du indlæser rækkerne. Men der er selvfølgelig tilfælde, hvor det ikke er en mulighed, f.eks. hvis du bruger komponenter, der skal bruge et færdigt recordsæt.
I de tilfælde kan du bruge den traditionelle metode, som arne præsenterede, men der er også et par andre muligheder. Især hvis du bruger en ny SQL Server 2012, vil der være mulighed for at bruger den nye window funktion.
Hvis du kan bruge en engelsk-sproget artikel, så læs nedenstående, som på en god pædagogisk måde giver et overblik over flere af mulighederne:
http://www.codeproject.com/Articles/300785/Calculating-simple-running-totals-in-SQL-ServerOvennævnte artikel kommer ikke ind på brugen af cte, der kom til som en mulighed med SQL Server 2005:
http://blog.sqltechie.com/2009/04/how-to-do-running-sum-using-cte-sql.htmlDen metode skulle efter sigende også være meget hurtigere end den traditionelle med subselect. Den bruger en rekursiv metode. Datamængden der kan behandles er derfor begrænset af SQL Serverens loft for hvor mange gange der kan kaldes rekursivt. Hvis man angiver MAXRECURSION=0 sætter man begrænsningen ud af kraft, og kan således i teorien behandle et meget stort antal rækker, men hvis forespørgslen er lavet forkert, kan man samtidig løbe ind i et uendeligt loop. Så under test bør man sætte den til en anden værdi (som kan være mellem 1 og 32767 - standard er 100).
Med mindre du har en stor datamængde vil metoden du bruger til at implementere din løbende sum nok ikke betyde det store. Men jo større datamængden er, des mere bør du kigge på alternativer, der er mere optimale end subselect metoden.
Hvis du har mod på at bruge en stored procedure, kan du selvfølgelig også bruge en implementering med server-side cursor.
Den kan faktisk i flere tilfælde være hurtigere end flere af de ovennævnte, selv om brugen af cursor-side cursors generelt har et dårligt ry. Men det kræver, at du har adgang til at oprette en stored procedure på SQL serveren, og at din komponent kan kalde den for at hente recordsættet fra den.
http://www.sqlteam.com/article/calculating-running-totalsHeld og lykke med dit projekt.