You will need a CTE to achieve the results
DECLARE@table TABLE
(
IdINT,
NameVARCHAR(10),
Value1INT,
value2INT,
PreviousRowId INT
)
INSERT@table
SELECT1, 'A', 10, 0, 0 UNION ALL
SELECT2, 'B', 0, 5, 1 UNION ALL
SELECT3, 'C', 0, 6, 2 UNION ALL
SELECT4, 'D', 0, 7, 3 UNION ALL
SELECT5, 'E', 0, 8, 4 UNION ALL
SELECT6, 'F', 0, 5, 5
; WITH cte_table AS
(
SELECTt.Id, t.Name, t.Value1, t.value2, t.Value1 + t.value2 AS total, t.PreviousRowId
FROM@table AS t
WHEREt.PreviousRowId = 0
UNION ALL
SELECTt2.Id, t2.Name, ct.total, t2.value2, ct.total + t2.value2 AS total, t2.PreviousRowId
FROM@table AS t2
INNER JOIN cte_table AS ct ON t2.PreviousRowId = ct.Id
)
SELECT*
FROMcte_table
How to post data/code on a forum to get the best help - Jeff Moden
http://www.sqlservercentral.com/articles/Best+Practices/61537/