Archive
Archive for July 4, 2011
SQL Query for calculating Running Totals
July 4, 2011
4 comments
A running total is the summation of a sequence of numbers which is updated each time a new number is added to the sequence, simply by adding the value of the new number to the running total.
Let’s see how to get these Running totals by creating a simple SQL queries below:
USE [AdventureWorks] GO -- Method 1: (Query Cost 9%) ;with RunTot as ( select row_number() over(partition by s.SalesPersonID order by s.OrderDate) as row, s.SalesPersonID, p.FirstName, p.LastName, s.TotalDue, s.OrderDate from Sales.SalesOrderHeader s join Person.Contact p on s.SalesPersonID = p.ContactID) select a.row, a.SalesPersonID, a.FirstName, a.LastName, a.OrderDate, a.TotalDue, sum(b.TotalDue) as RunTotal from RunTot a join RunTot b on a.SalesPersonID = b.SalesPersonID and a.row >= b.row group by a.row, a.SalesPersonID, a.FirstName, a.LastName, a.TotalDue, a.OrderDate order by a.SalesPersonID, a.row -- Method 2: (Query Cost 91%) ;with RunTot as ( select row_number() over(partition by s.SalesPersonID order by s.OrderDate) as row, s.SalesPersonID, p.FirstName, p.LastName, s.TotalDue, s.OrderDate from Sales.SalesOrderHeader s join Person.Contact p on s.SalesPersonID = p.ContactID) select row, SalesPersonID, FirstName, LastName, OrderDate, TotalDue, (select SUM(TotalDue) from RunTot b where b.SalesPersonID=a.SalesPersonID and b.row<=a.row) as RunTotal from RunTot a -- Output Listed below:
Categories: SQL Tips
RUNNING TOTALS