SQL Select Duplicate Issue - PullRequest
       5

SQL Select Duplicate Issue

0 голосов
/ 07 ноября 2019

Я использую базу данных 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

1 Ответ

1 голос
/ 07 ноября 2019

Кажется, вы просто хотите посмотреть cd_pol_cont_det, существует ли совпадение или нет. Так что используйте EXISTS. Что-то вроде

select ...
  ppc.payment_frequency ,
  case when exists
  (
    select null 
    from cd_pol_cont_det pcd
    where pcd.policy_no = p.policy_no
    and 
    (
      (pcd.payment_method = 'CQ' and pcd.payment_frequency = 1)
      or
      (pcd.css_log_cat in ('001') and pcd.css_log_sub_cat in ('OT5', '00L'))
    )
  ) then 'N' else 'Y' end as rpa_to_lapse 
from vw_pol p ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...