(В предыдущем намудрил с названиями полей)
Если нужно просто средний курс:
Select
T1.DATE_BGN,
T1.G_SNAME,
T1.MTRL_ID,
T1.NAME,
T1.QNT,
T1.SUMMA,
Decode(T1.RATE, 0,t2.RATE,t1.RATE) as RATE,
Decode(T1.USD,0, T1.SUMMA/ Decode(T1.RATE,0,t2.RATE,t1.RATE), T1.SUMMA) as USD
From
Table_source t1,
(select avg(RATE) RATE from Table_ where RATE>0) t2
Если нужно средний курс на момент списание(если еще возникают ограничения, сами их добавьте в: (select avg(t2.RATE) RATE from Table_ source t2 where t2.DATE_BGN<t1.DATE_BGN))
Select
T3.DATE_BGN,
T3.G_SNAME,
T3.MTRL_ID,
T3.NAME,
T3.QNT,
T3.SUMMA,
T3. RATE,
Decode(T3.USD,0, T3.SUMMA/ T3. RATE, T3.USD)
from
(
Select
T1.DATE_BGN,
T1.G_SNAME,
T1.MTRL_ID,
T1.NAME,
T1.QNT,
T1.SUMMA,
Decode(T1.RATE, 0,
(select avg(t2.RATE) RATE from Table_ source t2 where t2.DATE_BGN<t1.DATE_BGN),
t1.RATE) as RATE,
T1.USD
From
Table_source t1 ) t3
Не проверял работоспособность, просто мысли...