1

免责声明:我仍在学习 SQL,所以如果我的问题是业余的,或者是一个非常简单的答案,我深表歉意。我没有受过正规培训。我在自学。谢谢。

我正在寻找一个合适的查询来定位表中的重复项。这是我目前拥有的:

选择 [名称]

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

按名称 asc 排序

这工作......有点。它确实会返回特定“名称”多次出现的结果。它发生的次数并不相关,尽管我也有一个查询。

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

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

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

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

4

3 回答 3

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
于 2013-01-10T16:44:20.717 回答
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
)
于 2013-01-10T16:42:13.103 回答
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;
于 2013-01-10T17:02:54.920 回答