Как получить другую запись, когда ничего не соответствует условиям в одном запросе? - PullRequest
0 голосов
/ 13 октября 2019

Я использую ORACLE 12C.

Существует два компонента - Соглашение и Дело.

Хранение информации, связанной с соглашением, в Agreement_line и Таблице объектов. Общими столбцами между этими таблицами являются Trans_id и agr_line_no.

Аналогичным образом, информация, связанная с делом, хранится в таблицах Cla_case и Cla_event. Общий столбец между этими таблицами - Cla_event_no.

Я хочу получить подробную информацию о случае, случайная дата которого находится между Cover_start_date и Cover_end_date таблицы Agreement_line. Incident_date - это столбец таблицы Cla_event

Я получаю желаемый результат из запроса ниже:

select
  cc.cla_case_no
 ,al.poly_no
 ,al.agr_line_no
 ,al.agr_line_seq_no
 ,al.product_line_id
 ,al.trans_id
 ,al.cover_start_date
 ,ce.incident_date
 ,al.cover_end_date
 ,o.n15
 ,cc.name_id_no
 ,o.object_no
 ,o.seq_no
 ,CASE
    WHEN o.n15 = cc.name_id_no THEN ' '
    ELSE 'Joint Ins'
  END AS NAME_ID_CHECK
from
  cla_case cc
 ,cla_event ce
 ,agreement_line al
 ,object o
where
  cc.cla_case_no = 9353152
and
  ce.cla_event_no = cc.cla_event_no
and
  AL.COVER_START_DATE <= CE.INCIDENT_DATE
and
  al.cover_end_date >= ce.incident_date
and
  al.poly_no = 410385376
and
  al.product_line_id  = 'BHEDS' 
and
  al.agr_line_no = o.agr_line_no
and
  al.trans_id = o.trans_id

Но теперь мне также нужно извлечь последнюю запись предоставленного poly_no, когда инцидент_date не падает междуcover_start_date и cover_end_date

Я пробовал запрос ниже:

SELECT cc.cla_case_no,
   al.poly_no,
   al.agr_line_no,
   al.agr_line_seq_no,
   al.product_line_id,
   al.trans_id,
   al.cover_start_date,
   ce.incident_date,
   al.cover_end_date,
   o.n15,
   cc.name_id_no,
   o.object_no,
   o.seq_no,
   CASE WHEN o.n15 = cc.name_id_no THEN ' ' ELSE 
'Secondary insured' END
      AS NAME_ID_CHECK,
   ' ' "INCIDENT_DATE_CHECK"
  FROM cla_case cc,
   cla_event ce,
   agreement_line al,
   object o
 WHERE     cc.cla_case_no = 9353152
   AND ce.cla_event_no = cc.cla_event_no
   AND AL.COVER_START_DATE <= CE.INCIDENT_DATE
   AND al.cover_end_date >= ce.incident_date
   AND al.poly_no = 410385376
   AND al.product_line_id = 'BHEDS'
   AND al.agr_line_no = o.agr_line_no
   AND al.trans_id = o.trans_id
UNION
SELECT cc.cla_case_no,
   al2.poly_no,
   al2.agr_line_no,
   al2.agr_line_seq_no,
   al2.product_line_id,
   al2.trans_id,
   al2.cover_start_date,
   ce.incident_date,
   al2.cover_end_date,
   o2.n15,
   cc.name_id_no,
   o2.object_no,
   o2.seq_no,
   CASE WHEN o.n15 = cc.name_id_no THEN ' ' ELSE 
'Secondary insured' END
      AS NAME_ID_CHECK,
   'Incident date not falling between cover start date and 
cover end date '
      "INCIDENT_DATE_CHECK"
  FROM agreement line al2, object o2
where al2.poly_no not exists (
SELECT al.poly_no
FROM cla_case cc, cla_event ce, agreement_line al
where cc.cla_case_no = 9353152
and ce.cla_event_no = cc.cla_event_no
and AL.COVER_START_DATE <= CE.INCIDENT_DATE
and al.cover_end_date >= ce.incident_date
and al.poly_no = 410385376
and al.product_line_id  = 'BHEDS' )
and al2.poly_no = 410385376
and al2.product_line_id = 'BHEDS'
and al2.newest = 'Y'
and  al2.agr_line_no = o2.agr_line_no
and al2.trans_id = o2.trans_id

Я получаю сообщение об ошибке "Команда не завершена должным образом". Может ли кто-нибудь указать, что я делаю неправильно, и есть ли другой альтернативный способ вместо использования UNION?

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