找到重复项

时间:2013-01-10 16:38:05

标签: tsql duplicates sql-update

  

免责声明:我仍然在学习SQL,所以如果我的问题以业余爱好者的形式出现或者是一个非常简单的答案,我会道歉。我没有正式的训练。我在教自己。感谢。

我正在寻找一个正确的查询来查找表中的重复项。这是我现在拥有的:

  

选择[名称]

     

FROM [02Kids]作为Tmp
  GROUP BY [姓名]
  有计数(*)> 1

     

按名称命令asc

这有点......它会返回特定“名称”出现多次的结果。它发生的次数并不重要,尽管我也有查询。

我遇到的问题是,这实际上是更大的更新查询的一部分,虽然它也有效,但我发现我的副本并非都是“真正”重复。

更具体地说,这里是一个使用简单选择查询提取的数据示例,其中指定了名称:

http://i946.photobucket.com/albums/ad309/AGx-07_162/Capture_zps22107e1b.png

请注意每组结果的CustNo列。虽然每个结果集中的“名称”匹配,但第一组的CustNo不同。这些并不是真正的重复,因为它们不属于同一个客户。

有没有什么方法可以执行某种比较,只返回CustNo相同的名称?

3 个答案:

答案 0 :(得分:3)

您还需要将另一列添加到GROUP BY中:

SELECT [Name],[CustNo], Count(*) AS [Count]
FROM [02Kids] As Tmp
GROUP BY [Name], [CustNo]
HAVING Count(*)>1
ORDER BY [Name] ASC, [CustNo] ASC, Count(*) DESC

答案 1 :(得分:1)

SELECT [Name], [LocNo]

FROM [02Kids] As Tmp
GROUP BY [LocNo]
HAVING Count(*)>1

order by Name asc

或者,如果您甚至可以在GROUP BY子句中放置多个字段

SELECT [Name], [LocNo]

FROM [02Kids] As Tmp
GROUP BY [LocNo], [Name]
HAVING Count(*)>1

order by Name asc

您想只看到这个名字吗?

SELECT [Name] from
( SELECT [Name], [LockNo]
  FROM [02Kids] As Tmp
  Group BY [LocNo]
  HAVING Count(*) > 1
)

答案 2 :(得分:0)

请尝试以下操作向您展示所有重复项:

SELECT LocNo, CustNo, 02Kids.name FROM 02Kids
INNER JOIN (SELECT name FROM 02Kids
GROUP BY name HAVING count(*) > 1) dup 
ON 02Kids.name = dup.name;