Try the following:
SELECT ID , Salary,SUM(Salary) OVER(ORDER BY ID)Running Total
FROM Your_Table
Updated answer:
I spent all my day to get the following:
DECLARE @TAB TABLE(ID INT, SALARY INT)
INSERT INTO @TAB VALUES(1 ,100)
INSERT INTO @TAB VALUES(2 , 40)
INSERT INTO @TAB VALUES(3 , 30)
INSERT INTO @TAB VALUES(4 , 40)
INSERT INTO @TAB VALUES(5 , 90)
INSERT INTO @TAB VALUES(6 ,160)
INSERT INTO @TAB VALUES(7 , 70)
INSERT INTO @TAB VALUES(8 , 40)
INSERT INTO @TAB VALUES(9 , 20)
INSERT INTO @TAB VALUES(10, 10)
INSERT INTO @TAB VALUES(11,200)
INSERT INTO @TAB VALUES(12, 50)
DECLARE @MIN INT, @MAX INT, @PreVal INT, @CurVal INT, @OldVal INT,@NextVal, INT, @ExistVal INT
DECLARE @TABLE1 TABLE(ID INT, Sal INT, RunTotal INT)
INSERT INTO @TABLE1 (Id, Sal)
SELECT * FROM @TAB
SELECT @MIN=MIN(ID),@MAX=MAX(ID) FROM @TAB
WHILE(@MIN<=@MAX)
BEGIN
SELECT @NextVal=SALARY FROM @TAB WHERE ID=@MIN
SELECT @ExistVal=SALARY FROM @TAB WHERE ID=@MIN-1
SELECT @OldVal=RunTotal FROM @TABLE1 WHERE ID=@MIN-1
SELECT @PreVal=RunTotal FROM @TABLE1 WHERE ID=@MIN-2
IF(@OldVal>@PreVal+(@PreVal/2))
BEGIN
SELECT @CurVal = @NextVal+@ExistVal
END
ELSE
BEGIN
SELECT @CurVal=ISNULL(@OldVal,0)+@NextVal
END
UPDATE @TABLE1 SET RunTotal=@CurVal WHERE ID=@MIN
SELECT @MIN=@MIN+1
END
SELECT * FROM @TABLE1
Result:
ID Sal RunTotal
1 100 100
2 40 140
3 30 170
4 40 210
5 90 300
6 160 460
7 70 230
8 40 270
9 20 290
10 10 300
11 200 500
12 50 250
If anyone with a better answer, kindly mention in the comments.
source
share