Here's an improved version without using any loopCREATE TABLE OrderStock(OrderNo varchar(10), OrderDate datetime, Item_Code varchar(10), OrderQty int, DespatchedQty int ) CREATE TABLE DEspatch ( DespatchNo varchar(10), Item_Code varchar(10), Despatch_Qty int )INSERT INTO OrderStockVALUES ('abc','2010-01-23','Item1',2500,0),('mno','2010-01-15','Item1',3000,0),('pqr','2010-02-20','Item2',1350,0),('daa','2010-02-23','Item1',3300,0),('dwq','2010-02-22','Item2',4400,0),('dfg','2010-01-26','Item1',3000,0),('dbb','2010-03-03','Item2',2350,0),('xcv','2010-02-18','Item1',1300,0)INSERT INTO DEspatchVALUES ('dd1','Item1',300),('dd2','Item2',1000),('dd3','Item1',400),('dd4','Item2',2000),('dd5','Item1',300),('dd7','Item2',500),('dd8','Item1',10000)CREATE CLUSTERED INDEX IDX_OrderStock ON OrderStock(Item_Code,OrderDate,OrderNo)SELECT * FROM OrderStockDECLARE @Item_Code varchar(10), @OrderNo varchar(10), @OrderDate datetime,@Allocated int,@despatched int,@AllocatedSum intSELECT TOP 1 @Item_Code =Item_Code, @OrderNo= OrderNo, @OrderDate = OrderDateFROM OrderStockORDER BY OrderDateUPDATE oSET @Despatched=CASE WHEN COALESCE(@Allocated,0) = 0 THEN TotalDespatched ELSE TotalDespatched -@AllocatedSum END, @Allocated=o.DespatchedQty=CASE WHEN @Despatched > OrderQty THEN OrderQty ELSE @Despatched END, @AllocatedSum= CASE WHEN o.OrderDate=LatestOrderDate THEN 0 ELSE COALESCE(@AllocatedSum,0) + @Allocated END, @Item_Code =Item_Code,@OrderNo= OrderNo, @OrderDate = OrderDate FROM OrderStock o (TABLOCKX)CROSS APPLY(SELECT SUM(Despatch_Qty) AS TotalDespatched FROM DEspatch WHERE Item_Code=o.Item_Code )dCROSS APPLY(SELECT MAX(OrderDate) AS LatestOrderDate FROM OrderStock WHERE Item_Code=o.Item_Code)eOPTION (MAXDOP 1) SELECT * FROM OrderStockDROP TABLE OrderStockDROP TABLE DEspatchoutput---------------------------------------------before updateOrderNo OrderDate Item_Code OrderQty DespatchedQtymno 2010-01-15 00:00:00.000 Item1 3000 0abc 2010-01-23 00:00:00.000 Item1 2500 0dfg 2010-01-26 00:00:00.000 Item1 3000 0xcv 2010-02-18 00:00:00.000 Item1 1300 0daa 2010-02-23 00:00:00.000 Item1 3300 0pqr 2010-02-20 00:00:00.000 Item2 1350 0dwq 2010-02-22 00:00:00.000 Item2 4400 0dbb 2010-03-03 00:00:00.000 Item2 2350 0after updateOrderNo OrderDate Item_Code OrderQty DespatchedQtymno 2010-01-15 00:00:00.000 Item1 3000 3000abc 2010-01-23 00:00:00.000 Item1 2500 2500dfg 2010-01-26 00:00:00.000 Item1 3000 3000xcv 2010-02-18 00:00:00.000 Item1 1300 1300daa 2010-02-23 00:00:00.000 Item1 3300 1200pqr 2010-02-20 00:00:00.000 Item2 1350 1350dwq 2010-02-22 00:00:00.000 Item2 4400 2150dbb 2010-03-03 00:00:00.000 Item2 2350 0------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/