免责声明:我仍然在学习SQL,所以如果我的问题以业余爱好者的形式出现或者是一个非常简单的答案,我会道歉。我没有正式的训练。我在教自己。感谢。
我正在寻找一个正确的查询来查找表中的重复项。这是我现在拥有的:
选择[名称]
FROM [02Kids]作为Tmp
GROUP BY [姓名]
有计数(*)> 1按名称命令asc
这有点......它会返回特定“名称”出现多次的结果。它发生的次数并不重要,尽管我也有查询。
我遇到的问题是,这实际上是更大的更新查询的一部分,虽然它也有效,但我发现我的副本并非都是“真正”重复。
更具体地说,这里是一个使用简单选择查询提取的数据示例,其中指定了名称:
http://i946.photobucket.com/albums/ad309/AGx-07_162/Capture_zps22107e1b.png
请注意每组结果的CustNo列。虽然每个结果集中的“名称”匹配,但第一组的CustNo不同。这些并不是真正的重复,因为它们不属于同一个客户。
有没有什么方法可以执行某种比较,只返回CustNo相同的名称?
答案 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;