CTE找到重复?

问题描述 投票:-1回答:1

有人可以告诉我如何添加到此CTE以包含存储在另一个名为“WeccoPartyAddress”的表中的“地址类型”列吗?

我试图找到名字和姓氏的副本,以及地址类型地址='邮寄'的邮寄地址

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
sql sql-server join common-table-expression
1个回答
0
投票

考虑通过在外部和子查询中将JOIN子句添加到WeccoPartyAddress表中并使用所需的WHERE子句来扩展CTE。另请注意,添加了distinct以避免重复ID以确定表之间可能的一对多关系。

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)
© www.soinside.com 2019 - 2024. All rights reserved.