CTE, чтобы найти дубликаты? - PullRequest
       23

CTE, чтобы найти дубликаты?

0 голосов
/ 18 сентября 2018

Может кто-нибудь показать мне, как бы я добавил в этот CTE столбец «Тип адреса», который хранится в другой таблице с именем «WeccoPartyAddress»?

Я пытаюсь найти дубликаты для имени и фамилии и почтового адреса, где Address Type address = 'Mailing'

with dups as (
 select 
      wp.GtId
 from CORE.WeccoParty wp
 where exists (select 1
              from CORE.WeccoParty wpe
              where wp.FirstName = wpe.FirstName
              and   wp.LastName  = wpe.LastName
              and   wp.Dob       = wpe.Dob
             and     wp.GtId     <> wpe.GtId
             ) 

  )
  select distinct
      wp.GtId, 
      wp.CrmPartyId, 
      wp.LegalName, 
      wp.BusinessClass, 
      wp.RmFullName, 
      wp.PbeFullName, 
      wp.OverallClientStatus, 
      wp.OverallRpStatus, 
      wp.FirstName + ' ' + wp.LastName FullName, 
      wp.Dob
   from CORE.WeccoParty wp
   join dups d on d.GtId = wp.GtId
   order by 9,1

1 Ответ

0 голосов
/ 18 сентября 2018

Рассмотрите возможность расширения вашего CTE, добавив предложение JOIN в external и подзапрос к таблице WeccoPartyAddress с необходимыми предложениями WHERE.Обратите внимание также на добавленное distinct, чтобы избежать повторных идентификаторов для возможного отношения один-ко-многим между таблицами.

with dups as (
 select distinct p.GtId
 from CORE.WeccoParty p
 join CORE.WeccoPartyAddress a ON p.GtId = a.GtId

 where exists (select 1
               from CORE.WeccoParty sub_p
               left join CORE.WeccoPartyAddress sub_a 
                 on sub_p.GtId = sub_a.GtId and sub_a.AddressType = 'Mailing'
               where (p.FirstName     =  sub_p.FirstName
                      and p.LastName  =  sub_p.LastName
                      and p.Dob       =  sub_p.Dob
                      and p.GtId      <> sub_p.GtId)
                      and a.MailingAddress =  sub_a.MailingAddress
                      and a.GtId           <> sub_a.GtId
              ) 
)

И в зависимости от данных и отношений (например, может ли GtId иметь одинаковые биологические данные И / ИЛИтот же почтовый адрес?), который вы бы знали больше, возможно, вам придется настроить вышеуказанный запрос.Это может включать обмен left join на join и / или условия WHERE, такие как:

where (p.FirstName     =  sub_p.FirstName
       and p.LastName  =  sub_p.LastName
       and p.Dob       =  sub_p.Dob
       and p.GtId      <> sub_p.GtId)
   or
      (a.MailingAddress =  sub_a.MailingAddress
       and a.GtId       <> sub_a.GtId)
...