Refer the below solution,
DECLARE @temp table(empid int, sal int,month nvarchar(5))
INSERT INTO @temp VALUES(1, 1000, 'Jan' )
INSERT INTO @temp VALUES(1, 2000, 'Jan' )
INSERT INTO @temp VALUES(1, 3000, 'Jan' )
INSERT INTO @temp VALUES(1, 2000, 'Feb' )
INSERT INTO @temp VALUES(1, 3000, 'Feb' )
INSERT INTO @temp VALUES(1, 4000, 'Feb' )
INSERT INTO @temp VALUES(2, 1000, 'Jan' )
INSERT INTO @temp VALUES(2, 2000, 'Jan' )
INSERT INTO @temp VALUES(2, 3000, 'Jan' )
INSERT INTO @temp VALUES(2, 2000, 'Feb' )
INSERT INTO @temp VALUES(2, 3000, 'Feb' )
INSERT INTO @temp VALUES(2, 4000, 'Feb' )
---------------------------------------
DECLARE @finaltemp table(empid int, sal int,month nvarchar(5),runningtotal int)
DECLARE @maxid int,@count int
SELECT @maxid=max(empid) from @temp
SET @count =1
WHILE @count <=@maxid
BEGIN
;WITH cte as (
SELECT @count as empid,row_number() over (partition by @count order by @count) as rowid,sal,month from @temp where empid=@count
)
INSERT INTO @finaltemp
SELECT empid,sal,month,runningtotal from (
SELECT @count as empid,month,rowid,
sal,
sal+COALESCE((SELECT SUM(sal)
FROM cte b
WHERE b.rowid < a.rowid),0)
AS RunningTotal
FROM cte a where a.empid = @count
-- ORDER BY rowid
) x
SET @count =@count + 1
END
select * from @finaltemp