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

问题描述 投票:0回答:2

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

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

我如何检索这些记录的ID?

sql tsql substring
2个回答
0
投票

您可以使用窗口功能:

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

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


0
投票

使用group_concat()以逗号分隔列表的形式获取ID:

group_concat()
© www.soinside.com 2019 - 2024. All rights reserved.