Aqui está sua tabela de amostra
SELECT * INTO #TEMP
FROM
(
SELECT 'Item1' [Item Name], '01/01/2013' [Date], 10.00 [Price]
UNION ALL
SELECT 'Item1', '02/01/2013', 9.50
UNION ALL
SELECT 'Item1', '03/01/2013', 0
UNION ALL
SELECT 'Item1', '04/01/2013', 7.50
UNION ALL
SELECT 'Item1', '05/01/2013', 0.00
UNION ALL
SELECT 'Item1', '06/01/2013', 0.00
UNION ALL
SELECT 'Item1', '07/01/2013', 11.00
UNION ALL
SELECT 'Item2', '01/01/2013', 0.00
UNION ALL
SELECT 'Item2', '02/01/2013', 12.00
UNION ALL
SELECT 'Item2', '03/01/2013', 0.00
UNION ALL
SELECT 'Item2', '04/01/2013', 0.00
UNION ALL
SELECT 'Item2', '05/01/2013', 13.00
)TAB
E a consulta de resultado
SELECT [Item Name],[Date],
CASE WHEN [Price]=0 THEN
ISNULL((SELECT TOP 1 [Price]
FROM #TEMP T2
WHERE CAST(T2.[Date] AS DATE)<T1.[Date] AND T1.[Item Name]=T2.[Item Name] AND T2.[Price]>0
ORDER BY CAST(T2.[Date] AS DATE) DESC),0)
ELSE [Price] END [Price]
FROM #TEMP T1
Seu resultado está aqui
Aqui está o Fiddle funcionando http://sqlfiddle.com/#!3/afabd/1 (Se mostrar algum erro ao carregar a página, pressione RUNSQL, funcionará)