Fayz
what about the next query, it does what you want as far as I understand. Comments explain each step. Take a look at CTE's e-book. This example can even be modified to use the new MERGE command for SQL 2008.
DECLARE @Customers TABLE (Dates datetime, Customer integer, Value integer) INSERT INTO @Customers VALUES ('20100101', 1, 12), ('20100101', 2, NULL), ('20100101', 3, 32), ('20100101', 4, 42), ('20100101', 5, 15), ('20100102', 1, NULL), ('20100102', 2, NULL), ('20100102', 3, 39), ('20100102', 4, NULL), ('20100102', 5, 16), ('20100103', 1, 13), ('20100103', 2, 24), ('20100103', 3, NULL), ('20100103', 4, NULL), ('20100103', 5, 21), ('20100104', 1, 14), ('20100104', 2, NULL), ('20100104', 3, NULL), ('20100104', 4, 65), ('20100104', 5, 23) ; WITH CustCTE AS (SELECT Customer, Value, Dates, ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY Dates) RowNum FROM @Customers), CleanCust AS (SELECT Customer, ISNULL(Value, 0) Value, Dates, RowNum FROM CustCte cur WHERE RowNum = 1 UNION ALL SELECT Curr.Customer, ISNULL(Curr.Value, prev.Value) Value, Curr.Dates, Curr.RowNum FROM CustCte curr INNER JOIN CleanCust prev ON curr.Customer = prev.Customer AND curr.RowNum = prev.RowNum + 1) UPDATE trg SET Value = src.Value FROM @Customers trg INNER JOIN CleanCust src ON trg.Customer = src.Customer AND trg.Dates = src.Dates SELECT * FROM @Customers