Hi Jeff,
I have modified the original script. Here's the entire script (DDL + Cursor Script)
IF OBJECT_ID (N'dbo.Account_Tagging', N'U') IS NOT NULL
AND EXISTS(SELECT * from dbo.Account_Tagging)
drop table Account_Tagging
BEGIN
CREATE TABLE Account_Tagging(
Account VARCHAR(17) NOT NULL
,Budget_Remaining INTEGER NOT NULL
,Amount NUMERIC(7,2) NOT NULL
,Budget_To_Tag BIT NOT NULL
,RN INTEGER NOT NULL
);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-600-65-0',5124,2500,0,1);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-603-69-0',12992,3100,0,1);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-603-69-0',0,2750,0,2);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-603-69-0',0,1000,0,3);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-604-65-0',617,700,0,1);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-604-69-0',3604,425,0,1);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-605-65-0',1182,1006.25,0,1);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-605-65-0',0,758,0,2);
INSERT INTO Account_Tagging(Account,Budget_Remaining,Amount,Budget_To_Tag,RN) VALUES ('10-60001-605-65-0',0,695,0,3);
END
BEGIN
CREATE TABLE #x
(
Account varchar(20),
Budget_Remaining float,
Amount float,
RunningBalance float,
Budget_To_Tag float,
RN varchar(20)
);
INSERT #x(Account,Budget_Remaining,Amount,RunningBalance,Budget_To_Tag,RN)
SELECT Account,Budget_Remaining,Amount, 0 RunningBalance,Budget_To_Tag,RN
FROM Account_Tagging
ORDER BY Account,RN;
DECLARE @account varchar(20), @Budget_Remaining float,@Amount float,@RunningBalance float,
@Budget_To_Tag float,@RN varchar(20);
--SET @RunningBalance = 0;
DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT Account,Budget_Remaining,Amount,0 RunningBalance,Budget_To_Tag, RN FROM #x
ORDER BY Account,RN;
OPEN c;
FETCH c INTO @account,@Budget_Remaining, @Amount, @RunningBalance , @Budget_To_Tag, @RN;
WHILE @@FETCH_STATUS = 0
BEGIN
--IF @RN = 1
--SET @RunningBalance = @Budget_Remaining;
--ELSE
SET @RunningBalance = @Budget_Remaining - @Amount;
UPDATE #x SET Budget_Remaining = @RunningBalance WHERE Account = @account and @RN + 1 = RN;
UPDATE #x SET RunningBalance = @RunningBalance WHERE Account = @account and @RN = RN;
FETCH c INTO @account,@Budget_Remaining, @Amount, @RunningBalance , @Budget_To_Tag, @RN;
END
CLOSE c; DEALLOCATE c;
UPDATE #x
SET Budget_To_Tag = RunningBalance
WHERE RunningBalance > Amount
select * from Account_Tagging
select * from #X
drop table #X
END