Voici votre exemple de tableau
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
Et la requête de résultat
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
Votre résultat est ici
Voici le violon fonctionnel http://sqlfiddle.com/#!3/afabd/1 (S'il affiche une erreur lors du chargement de la page, appuyez sur RUNSQL, cela fonctionnera)