Я использую базу данных Oracle. Мой SQL работает, но возвращает повторяющийся результат. Столбец RPA_To_Lapse устанавливает флаг, если у участника есть журнал контактов с определенной категорией / подкатегорией. Участник возвращается как «да», так и «нет», потому что есть журнал, который соответствует критериям, и журнал, который не соответствует критериям. Политика компании заключается в создании объединений в предложении where.
SELECT DISTINCT ppd.group_id,
p.mem_no AS
Main_Member_No,
p.policy_no,
'N' AS
Mixed_Policy_Ind,
'Y' AS Renewal,
p.policy_eff_dt AS
Effective_Date,
p.policy_eff_dt AS Lapse_Date,
'Left company – Individual cover not retained' AS Lapse_Reason
,
'Don’t print anything'
AS Lapse_Pack_Type,
ppc.payment_method,
ppc.payment_frequency,
( CASE
WHEN ( ppc.payment_method = 'CQ'
AND ppc.payment_frequency = '1' )
OR ( css_log_cat IN ( '001' )
AND css_log_sub_cat IN ( 'OT5', '00L' ) ) THEN
'N'
ELSE 'Y'
END ) AS RPA_To_Lapse
FROM vw_pol p,
cd_pol_mem_det mpl,
cd_pol_cont ppd,
cd_pol_cont_det ppc,
cd_group g,
cd_cont_log_mem clm,
cd_cont_log_detail_mem cldm
WHERE p.policy_status IN ( 'C' )
AND mpl.member_status = 'A'
AND p.policy_no = mpl.policy_no
AND p.policy_no = ppc.policy_no
AND p.mem_no = clm.log_caller_id (+)
AND clm.contact_log_id = cldm.contact_log_id (+)
AND p.mem_no IN (SELECT mem_no
FROM vw_pol
WHERE policy_lapse_reason =
'Left company - cover retained on Individual basis'
AND policy_lapse_dt = To_date('23/10/2019', 'dd/mm/yyyy'
))
AND p.mem_no IN (SELECT log_caller_id
FROM cd_cont_log_mem clm,
cd_cont_log_detail_mem cldm
WHERE clm.contact_log_id = cldm.contact_log_id
AND css_log_cat IN ( '001' )
AND css_log_sub_cat IN ( 'OT5', '00L' ))
AND p.policy_no = ppd.policy_no
AND mpl.member_activity_start_dt <= Trunc(SYSDATE)
AND mpl.member_activity_end_dt >= Trunc(SYSDATE)
AND mpl.member_activity_start_dt >= ppd.contract_start_dt
AND mpl.member_activity_end_dt <= ppd.contract_end_dt
AND mpl.member_activity_start_dt >= ppc.contract_activity_start_dt
AND mpl.member_activity_end_dt <= ppc.contract_activity_end_dt
AND Trunc(SYSDATE) BETWEEN ppd.contract_start_dt AND ppd.contract_end_dt
AND g.group_id = ppd.group_id