Будет ли что-то подобное делать?(Я сократил ваши таблицы; мне не хотелось печатать слишком много.)
Я не исправил ваш запрос, а скорее написал новый.Я не знаю, почему вы использовали функцию COUNT;на что ты рассчитывал?Если вы все равно хотите использовать свой код, посмотрите, что написал @LoztInSpace, и мой комментарий под этим ответом.
Также я попытался правильно объединить таблицы и использовать псевдонимы таблиц для всех столбцов.Я предлагаю вам сделать то же самое в будущем.Без этого трудно угадать, к какой таблице принадлежат эти столбцы.
SQL> with
2 operation (actual_op, surgeon, op_date) as
3 (select 'LO', 118, date '2016-05-06' from dual union all
4 select 'HT', 118, date '2016-05-06' from dual union all
5 select 'TS', 118, date '2016-05-07' from dual union all
6 select 'TS', 111, date '2016-01-01' from dual
7 ),
8 operation_type (op_code, operation_name, professional_fee) as
9 (select 'LO', 'Lobotomy' , 1050 from dual union all
10 select 'HT', 'Heart Transplant', 7500 from dual union all
11 select 'TS', 'Tonsillectomy' , 1050 from dual union all
12 select 'AP', 'Appendicectomy', 750 from dual
13 ),
14 staff (person_id, annual_basic_salary) as
15 (select 118, 20000 from dual union all
16 select 111, 8000 from dual
17 )
18 select sum(t.professional_fee) + s.annual_basic_salary as result
19 from operation_type t join operation o on o.actual_op = t.op_code
20 join staff s on s.person_id = o.surgeon
21 where s.person_id = 118
22 and extract(year from o.op_date) = 2016
23 group by s.annual_basic_salary;
RESULT
----------
29600
SQL>