如何在SQL Server/Excel中筛选Group和Division重复的多Name记录?
筛选Excel中Group和Division重复对应的完整记录
原始表格([Sheet1$])
| Group | Division | Name |
|---|---|---|
| 555 | 2 | Adam |
| 555 | 1 | Bob |
| 444 | 1 | Sarah |
| 555 | 2 | Ann |
| 444 | 1 | Jeff |
预期结果
| Group | Division | Name |
|---|---|---|
| 555 | 2 | Adam |
| 555 | 2 | Ann |
| 444 | 1 | Sarah |
| 444 | 1 | Jeff |
错误尝试及原因
你尝试的语句报错,核心原因是SQL语法规则:GROUP BY子句仅指定[Group]和[Division]时,SELECT中只能包含这两个分组列或聚合函数(比如COUNT(*)),不能直接包含未分组的[Name]列。
SELECT [Group], [Division], [Name], COUNT(*) FROM [Sheet1$] GROUP BY [Group], [Division] HAVING COUNT(*) > 1
正确查询语句
方法1:子查询关联(兼容性好,适用于所有Excel ODBC驱动)
先通过子查询找出存在多个Name的Group+Division组合,再关联原表获取完整记录:
SELECT t.[Group], t.[Division], t.[Name] FROM [Sheet1$] t INNER JOIN ( SELECT [Group], [Division] FROM [Sheet1$] GROUP BY [Group], [Division] HAVING COUNT(*) > 1 ) dup ON t.[Group] = dup.[Group] AND t.[Division] = dup.[Division] ORDER BY t.[Group], t.[Division], t.[Name]
方法2:窗口函数(适用于支持窗口函数的新版Excel ODBC驱动)
利用窗口函数直接计算每个Group+Division组合的记录数,再筛选出符合条件的行:
SELECT [Group], [Division], [Name] FROM ( SELECT [Group], [Division], [Name], COUNT(*) OVER(PARTITION BY [Group], [Division]) AS record_count FROM [Sheet1$] ) t WHERE record_count > 1 ORDER BY [Group], [Division], [Name]
内容的提问来源于stack exchange,提问作者h.rashid
相关产品推荐
相关产品推荐

