• Try this - short and sweet

    ;with mycte as (

    select T1.Datecol, ISNULL(T2.Value,0) Val, ROW_NUMBER() OVER(order by T1.datecol) RN

    from Dimdate T1 left join TotalsData T2 ON T1.DateCol=T2.DateCol

    )

    select Datecol,(select top 1 Val FROM mycte T where T.RN<mycte.RN and val<>0 order by RN DESC) val

    from mycte

    where val=0

    UNION

    SELECT Datecol,Val FROM mycte where val>0