Här är ditt exempelbord
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
Och resultatfrågan
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
Ditt resultat är här
Här är den fungerande fiolen http://sqlfiddle.com/#!3/afabd/1 (Om det visar något fel när sidan laddas, tryck på RUNSQL, det kommer att fungera)