Bert Wagner shows the best method to calculate a running total in SQL Server 2012 or later:
Before SQL Server 2012, the solution to generating a running total involved cursors, CTEs, nested subqueries, or cross applies. This StackOverflow thread has a variety of solutions if you need to solve this problem in an older version of SQL Server.
However, SQL Server 2012’s introduction of window functions makes creating a running total incredibly easy.
Enhanced window functions was one of 2012’s killer features on the T-SQL developer side. Bert’s post doesn’t cover window ranges and sizes, as the defaults work for him, but Steve Stedman has a good post on the topic if you want more details.