查找计数 > 1 的记录

Find records having count > 1

我有一个 table 包含重复的记录。这些重复项被分组在重复组中,并且在相应的组中也有一个索引(记录号)。在相关的 table 中,我有所有记录,甚至是那些不重复的记录。

我只需要 select 那些在重复组中至少有 2 个条目的记录。所以我使用了计数、分组依据和拥有。

问题是这样做时我得到了奇怪的结果。以下屏幕截图显示了所有记录,包括重复组中只有一个条目的记录。大约有 10k 个组包含 2 个或更多重复项

问题是,一旦我取消对评论部分的评论,我只会得到 16 条记录,而不是所有在组中具有 > 1 个条目的记录,并且只有 groupid 的 2 到 8...

有人看到我在这里遗漏了什么吗?

SELECT new_firstname AS firstname,
       new_lastname AS lastname,
       DubGroupID AS groupid,
       RecNumberInDupGroup AS recnr_ingroup
FROM [SOMETABLE]
WHERE BatchCheckJobID = '59aae39d7ee949fc8c9cce2a5efc2a5e'
  AND DubGroupID IN (SELECT COUNT(DubGroupID)
                     FROM [SOMETABLE]
                     GROUP BY DubGroupID
                     HAVING COUNT(DubGroupID) > 1)
ORDER BY groupid,
         recnr_ingroup ASC;

非常感谢任何提示。

您正在检查 DubGroupID IN(但在此处选择计数)。执行以下操作-

......
AND DubGroupID IN (SELECT DubGroupID 
                 FROM [SOMETABLE]
                 GROUP BY DubGroupID
                 HAVING COUNT(DubGroupID) > 1)
.........

这个评论太长了(因为它包含SQL),但是上面不能写成下面这样吗?

WITH CTE AS(
    SELECT new_firstname AS firstname,
           new_lastname AS lastname,
           DubGroupID AS groupid,
           RecNumberInDupGroup AS recnr_ingroup,
           COUNT(DubGroupID) OVER (PARTITION BY DubGroupID) AS [Count]
    FROM SOMETABLE
    WHERE BatchCheckJobID = '59aae39d7ee949fc8c9cce2a5efc2a5e')
SELECT *
FROM CTE
WHERE [Count] > 1;

这将 return 所有行,其中超过 1 行的值与 DubGroupID 相同,其中 BatchCheckJobID 的值为 '59aae39d7ee949fc8c9cce2a5efc2a5e'

与您使用 IN 的查询不同,这也不会导致 table 的 2 次扫描。