Below is a simple example of how to create a running total in T-SQL using a self-join.
The total is created by summing the preceding values, the precedence of which is determined by, in this instance, the sale date field.
A date field, or another unique order field, is required for this technique to work otherwise all the values would be summed at once, based on grouping, and the summed value would be displayed for each relevant record.
CREATE TABLE #Product ( Product_ID INT ,Product VARCHAR(10) ) CREATE TABLE #Sale ( Product_ID INT ,SaleAmount MONEY ,SaleDate DATETIME ) INSERT INTO #Product VALUES ( 1 ,'Bike' ) ,( 2 ,'Car' ) ,( 3 ,'Truck' ) INSERT INTO #Sale VALUES ( 1 ,10 ,'20150101 12:00:00.000' ) ,( 1 ,10 ,'20150102 13:00:00.000' ) ,( 2 ,20 ,'20150101 13:00:00.000' ) ,( 2 ,30 ,'20150101 14:00:00.000' ) ,( 3 ,30 ,'20150101 12:00:00.000' ) SELECT a.Product_ID ,p.Product ,a.SaleAmount ,SUM(b.SaleAmount) AS RunningTotal ,a.SaleDate FROM #Sale AS a INNER JOIN #Product AS p ON a.Product_ID = p.Product_ID LEFT JOIN #Sale AS b ON a.Product_ID = b.Product_ID AND b.SaleDate <= a.SaleDate GROUP BY a.Product_ID ,p.Product ,a.SaleAmount ,a.SaleDate DROP TABLE #Sale DROP TABLE #Product