TSQL:按子字符串(名称)分组并在SELECT

我们将公司数据存储在表格中。为了消除重复行,我们需要使用以下标准来识别公司的重复数据集:如果CompanyName,City和邮政编码的前五个字母与其他记录的相同字段匹配,则它是重复项。稍后我们将删除重复项。我遇到的问题是,由于没有将ID上的记录分组,因此无法检索这些记录的ID。 我正在使用以下SQL:

Select count(ID) as DupCount,SUBSTRING(Name,1,5) as Name,City,PostalCode 
from tblCompany 
group by SUBSTRING(Name,5),PostalCode 
Having count(ID) > 1 
order by count(ID) desc 

如何检索这些记录的ID?

zrchuo 回答:TSQL:按子字符串(名称)分组并在SELECT

您可以使用窗口功能:

Select c.*
from (select c.*,count(*) over (partition by left(Name,5),City,PostalCode) as cnt
      from tblCompany c
     ) c
where cnt >= 2;

这将返回带有dups的各个行。然后,您可以对此进行总结或对结果集进行所需的操作。

,

使用group_concat()获取ID作为逗号分隔列表:

select 
  SUBSTRING(Name,1,5) as Name,PostalCode,count(ID) as counter,group_concat(id order by id) as ids
from tblCompany 
group by SUBSTRING(Name,PostalCode 
having count(ID) > 1 
order by count(ID) desc
本文链接:https://www.f2er.com/3071901.html

大家都在问