Я думаю, что аналитическая форма функции AVG может помочь. Вот пример; Мне не хотелось вводить столько значений (так как вы не предоставили образцы данных CREATE TABLE и INSERT INTO), но я надеюсь, что вы поймете, что это такое. Обратите внимание на строки №20 и №21.
SQL> with adm_prc (proc_code, adprc_pat_cost) as
2 (select 12055, 250 from dual union all
3 select 43111, 355 from dual union all
4 select 15510, 75 from dual union all
5 select 19887, 68 from dual union all
6 select 29844, 109.28 from dual union all
7 select 33335, 70.45 from dual
8 ),
9 procedure (proc_code, proc_std_cost) as
10 (select 12055, 250 from dual union all
11 select 15509, 75 from dual union all
12 select 15510, 75 from dual union all
13 select 15511, 200 from dual union all
14 select 17122, 500 from dual
15 )
16 select
17 a.proc_code,
18 a.adprc_pat_cost,
19 p.proc_std_cost,
20 round(avg(a.adprc_pat_cost) over (order by null), 2) avg_adm_cost,
21 p.proc_std_cost - round(avg(a.adprc_pat_cost) over (order by null), 2) diff
22 from adm_prc a left join procedure p on p.proc_code = a.proc_code;
PROC_CODE ADPRC_PAT_COST PROC_STD_COST AVG_ADM_COST DIFF
---------- -------------- ------------- ------------ ----------
12055 250 250 154,62 95,38
15510 75 75 154,62 -79,62
29844 109,28 154,62
43111 355 154,62
19887 68 154,62
33335 70,45 154,62
6 rows selected.
SQL>