返回记录的重复计数

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

我如何添加计数以显示根据我在sql中的规则找到的重复数量?我试图找到重复的记录,他们只有inc的国家和公司注册号重复。所以我只想找到重复项,其中gtid对每个副本都是唯一的,并且注册国家和公司注册号都有> 1

  select distinct top 10000 wp1.GtId, 
  wp1.CrmPartyId, 
  wp1.LegalName, 
  wp1.BusinessClass, 
  wp1.RmFullName, 
  wp1.PbeFullName, 
  wp1.OverallClientStatus, 
  wp1.OverallRpStatus, 
  wp1.FirstName,
  wp1.LastName,  
 wp1.CompanyRegNum,
   wp1.CountryInc,
  wp2.GtId, 
  wp2.CrmPartyId, 
  wp2.LegalName, 
  wp2.BusinessClass, 
  wp2.RmFullName, 
  wp2.PbeFullName, 
  wp2.OverallClientStatus, 
  wp2.OverallRpStatus,  
  wp2.FirstName,
  wp2.LastName,
     wp2.CompanyRegNum,
     wp2.CountryInc
  from CORE.WeccoParty wp1
  join CORE.WeccoParty wp2 on   wp1.CompanyRegNum = wp2.CompanyRegNum
                     and  wp1.CountryInc  = wp2.CountryInc
                     and  wp1.GtId     <> wp2.GtId

  where wp1.CompanyRegNum is not null
  and wp1.OverallClientStatus = 'Onboarded' and wp2.OverallClientStatus = 
 'Onboarded'
  and wp1.OverallRpStatus = 'Onboarded' and wp2.OverallRpStatus = 
  'Onboarded'
  and lower(WP1.CompanyRegNum) NOT IN     
  ('0','.','n.a','n/a','n.a.','00000','unknown','Unknown','000000','00000000')
  and wp1.CompanyRegNum NOT LIKE('^0*0$')
  and   wp1.CountryInc is not null
sql sql-server
2个回答
0
投票

OVER()中使用窗口函数PARTITION BY和你的规则重复

duplicate_count = count(*) OVER ( wp2.CompanyRegNum, wp2.CountryInc )

0
投票

使用RANK Rank Function或Count

下面是两个例子,如果我理解正确的话,如何得到你想要的东西。这有助于找到表中存在的组合/重复。

使用RANK:如果rn> 1,则意味着组合中出现了几次(具有不同的GtId)。

您可以将它放在查询中,如果您将查询作为内部查询,则只需选择rn> 1的所有行即可找到您要查找的组合。但是请记住,即使对于该组合​​存在重复,行仍然可以具有rn = 1。

RANK() OVER(Partition by wp1.CountryInc,wp2.CompanyRegNum ORDER BY wp2.GtId desc ) as rn

像这样

select * from 
    (Select wp1.CountryInc,wp2.CompanyRegNum,wp2.GtId,
     ROW_NUMBER() OVER(Partition by wp1.CountryInc,wp2.CompanyRegNum OVER wp2.GtId ) as rn
  from CORE.WeccoParty wp1
  join CORE.WeccoParty wp2 on   wp1.CompanyRegNum = wp2.CompanyRegNum
                     and  wp1.CountryInc  = wp2.CountryInc
                     and  wp1.GtId     <> wp2.GtId

  where wp1.CompanyRegNum is not null
  and wp1.OverallClientStatus = 'Onboarded' and wp2.OverallClientStatus = 
 'Onboarded'
  and wp1.OverallRpStatus = 'Onboarded' and wp2.OverallRpStatus = 
  'Onboarded'
  and lower(WP1.CompanyRegNum) NOT IN     
  ('0','.','n.a','n/a','n.a.','00000','unknown','Unknown','000000','00000000')
  and wp1.CompanyRegNum NOT LIKE('^0*0$')
  and   wp1.CountryInc is not null )q
  where q.rn >1

使用计数:

 Select wp1.CountryInc,wp2.CompanyRegNum, COUNT(Distinct wp2.GtId) as NoOfDuplicates
 from CORE.WeccoParty wp1
  join CORE.WeccoParty wp2 on   wp1.CompanyRegNum = wp2.CompanyRegNum
                     and  wp1.CountryInc  = wp2.CountryInc
                     and  wp1.GtId     <> wp2.GtId

  where wp1.CompanyRegNum is not null
  and wp1.OverallClientStatus = 'Onboarded' and wp2.OverallClientStatus = 
 'Onboarded'
  and wp1.OverallRpStatus = 'Onboarded' and wp2.OverallRpStatus = 
  'Onboarded'
  and lower(WP1.CompanyRegNum) NOT IN     
  ('0','.','n.a','n/a','n.a.','00000','unknown','Unknown','000000','00000000')
  and wp1.CompanyRegNum NOT LIKE('^0*0$')
  and   wp1.CountryInc is not null 
  group by wp1.CountryInc,wp2.CompanyRegNum
  having COUNT(Distinct wp2.GtId)  >1
© www.soinside.com 2019 - 2024. All rights reserved.