Это выражение:
nvl('Single-occupancy',0) as 'Single-occupancy',
использует функцию Oracle на заказ, чтобы сказать: если значение строки Single-occupancy'
не равно нулю, вернуть число 0
.
Эта логика на самом деле не имеет смысла. Строковое значение никогда не бывает null
. И возвращаемое значение иногда является строкой, а иногда числом. Это должно привести к ошибке преобразования типа, потому что первое значение не может быть преобразовано в число.
Я думаю, вы намереваетесь:
coalesce("Single-occupancy", 0) as "Single-occupancy",
Двойные кавычки используются для кавычек идентификаторов, поэтомуэто относится к столбцу под названием Single-occupancy
.
Все, что сказано, исправит вашу модель данных . Не имейте идентификаторов, которые должны быть в кавычках. Возможно, у вас нет контроля над исходными данными, но вы определенно имеете контроль в своем запросе:
coalesce("Single-occupancy", 0) as Single_occupancy,
РЕДАКТИРОВАТЬ:
Просто напишите запрос, используя условное агрегирование и правильные JOIN
s:
select s.service_sub_type_descr, ch.claim_id,
sum(case when service_sub_type_descr = 'Single-occupancy' then item_paid_amt else 0 end) as single_occupancy,
sum(case when service_sub_type_descr = 'Multi-occupancy' then item_paid_amt else 0 end) as multi_occupancy
from table_1 ch join
table_" ci
on ch.claim_id = ci.claim_id join
table_3 s
on ci.service_type_id = s.service_type_id join
table_4 ppd
on ch.policy_no = ppd.policy_no
group by s.service_sub_type_descr, ch.claim_id;
Гораздо проще на мой взгляд.