put your initial query results onto a temporary table with an identity and then do update like below:-UPDATE t1SET t1.ALLOCATED=CASE WHEN COALESCE(t2.BalSum,t1.STOCK)>=t1.SALES THEN t1.SALES ELSE CASE WHEN COALESCE(t2.BalSum,t1.STOCK)>0 THEN COALESCE(t2.BalSum,t1.STOCK) ELSE 0 END END,t1.BALANCE=COALESCE(t2.BalSum,t1.STOCK)-t1.[SALES]FROM #Temp t1CROSS APPLY(SELECT TOP 1 BALANCE AS BalSum FROM #Temp WHERE Part=t1.Part AND ID <t1.ID ORDER BY ID DESC)t2