SELECT * FROM TabPrice
UNION
SELECT t1.id,t1.matnr,dateadd(day,number,t1.mdate) as mdate,t1.price
from master..spt_values with(nolock)
INNER JOIN TabPrice t1 ON dateadd(day,number,t1.mdate)>=t1.mdate
INNER JOIN TabPrice t2 ON t1.id+1=t2.id
where type='P' and number>=0
and DATEDIFF(day,t1.mdate,t2.mdate)>number
FROM tabdate as a
OUTER APPLY (
SELECT TOP 1 *
FROM TabPrice
WHERE mdate <= a.mdate
ORDER BY mdate DESC
) as b