猿问

在SQL Server中查找重复的行

我有一个组织的SQL Server数据库,并且有很多重复的行。我想运行一条select语句以获取所有这些信息和重复数量,而且还返回与每个组织相关联的ID。


如下语句:


SELECT     orgName, COUNT(*) AS dupes  

FROM         organizations  

GROUP BY orgName  

HAVING      (COUNT(*) > 1)

将返回类似


orgName        | dupes  

ABC Corp       | 7  

Foo Federation | 5  

Widget Company | 2 

但我也想获取它们的ID。有什么办法吗?也许像一个


orgName        | dupeCount | id  

ABC Corp       | 1         | 34  

ABC Corp       | 2         | 5  

...  

Widget Company | 1         | 10  

Widget Company | 2         | 2  

原因是还有一个单独的链接到这些组织的用户表,我想统一它们(因此,请删除重复对象,以便用户链接到同一组织而不是重复组织)。但是我想手动分开,所以我不会搞砸任何东西,但是我仍然需要一条语句返回所有重复组织的ID,这样我才能浏览用户列表。


呼如林
浏览 869回答 3
3回答

不负相思意

select o.orgName, oc.dupeCount, o.idfrom organizations oinner join (    SELECT orgName, COUNT(*) AS dupeCount    FROM organizations    GROUP BY orgName    HAVING COUNT(*) > 1) oc on o.orgName = oc.orgName

慕侠2389804

您可以运行以下查询,并找到重复项max(id)并删除这些行。SELECT orgName, COUNT(*), Max(ID) AS dupes FROM organizations GROUP BY orgName HAVING (COUNT(*) > 1)但是您必须多次运行此查询。
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答