我有一个包含重复记录的表。这些重复项被分组为重复组,并且在相应组中也具有索引(记录号)。在相关表中,我具有所有记录,即使不是重复的记录也是如此。
我只需要选择那些记录,在重复组中至少要有2条记录。所以我使用了count,group by和have。
问题是这样做时我得到奇怪的结果。以下屏幕快照显示了所有记录,包括那些在重复组中只有一个条目的记录。大约有1万个群组,其中包含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;
任何提示都值得赞赏。
答案 0 :(得分:2)
这对注释来说太长了(因为它包含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;
这将返回所有行,其中有多于DubGroupID
的值为1的行,其中BatchCheckJobID
的值为'59aae39d7ee949fc8c9cce2a5efc2a5e'
。
与使用IN
进行查询不同,这也不会导致对该表进行2次扫描。
答案 1 :(得分:1)
您检查DubGroupID IN(但在此处选择count)。做以下事情-
......
AND DubGroupID IN (SELECT DubGroupID
FROM [SOMETABLE]
GROUP BY DubGroupID
HAVING COUNT(DubGroupID) > 1)
.........