我已经使用您提供的数据集进行了测试,并且可以正常工作。
第一个,不包含在另一个组中的组:
SELECT DISTINCT Group_Number FROM #T
WHERE NOT EXISTS (SELECT Group_Number G2
FROM #T AS T2
WHERE T2.Group_Number <> #t.Group_Number
AND T2.ID = #T.ID)
而且...另一种方法很容易拥有这个:
SELECT DISTINCT Group_Number FROM #T WHERE NOT Group_Number IN (
SELECT DISTINCT Group_Number FROM #T
WHERE NOT EXISTS (SELECT Group_Number G2
FROM #T AS T2
WHERE T2.Group_Number <> #t.Group_Number
AND T2.ID = #T.ID)
)
只是问自己,我意识到我的回答并不完全准确。
首先,我意识到添加:
INSERT INTO #t
VALUES (6, 50),
(7, 60),
(8, 50),
(8, 60)
第 8 组没有出现,因为其中一项出现在第 6 组中,而另一项出现在第 7 组中。
所以,我做了很多检查,得出的结论是,下面的代码是保证结果的代码,也提供了可追溯性来验证响应是否正确:
SELECT DISTINCT Group_Number FROM
(
SELECT T1.Group_Number, T1.Rows, T2.Group_Number as Comparing_With_Other_Group, Count(DISTINCT T2.ID) AS Rows_On_Other_Group
FROM (
SELECT Group_Number, Count(DISTINCT ID) AS Rows
FROM #T
GROUP BY Group_Number
) T1
INNER JOIN #T AS T2
ON T1.Group_Number <> T2.Group_Number
AND EXISTS (SELECT 1 FROM #T WHERE #T.Group_Number = T1.Group_Number and #T.ID = T2.ID)
GROUP BY T1.Group_Number, T2.Group_Number, T1.Rows
) SubQry
WHERE Rows = Rows_On_Other_Group
如果您仅运行 SubQry,您将看到可追溯性,而完整查询将向您显示系统可以找到另一个组的组,该组过滤我正在搜索的组中的 ID,找到相同数量的身份证。