Проблема с функцией SQL Pivot - PullRequest
0 голосов
/ 18 октября 2019

У меня есть SQL-запрос, в котором я пытаюсь заменить нулевые результаты на ноль. Мой код выдает ошибку [1]: ORA-00923: ключевое слово FROM не найдено там, где ожидается, я использую базу данных Oracle.

Select service_sub_type_descr,
nvl('Single-occupancy',0) as 'Single-occupancy',
nvl('Multi-occupancy',0) as 'Multi-occupancy'
From 
(select  s.service_sub_type_descr as service_sub_type_descr, ch.claim_id,nvl(ci.item_paid_amt,0) as item_paid_amt
from table_1 ch, table_" ci, table_3 s, table_4 ppd 
where ch.claim_id = ci.claim_id and ci.service_type_id = s.service_type_id 
and ci.service_sub_type_id = s.service_sub_type_id and ch.policy_no = ppd.policy_no) 
Pivot (
count(distinct claim_id), sum(item_paid_amt) as paid_amount For service_sub_type_descr IN ('Single-occupancy', 'Multi-occupancy')
) 

Ответы [ 2 ]

3 голосов
/ 18 октября 2019

Это выражение:

 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; 

Гораздо проще на мой взгляд.

1 голос
/ 18 октября 2019

для псевдонимов столбцов, вы должны использовать двойные кавычки!

не использовать

 as 'Single-occupancy'

, но:

 as "Single-occupancy",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...