在 sql 中,我想要一个查询,它会给我重复项。但是,我想并排查看重复项。而不是仅仅计数

In sql I want to a query in which it gives me the duplicates. However, i would like to see the duplicates side by side. Instead of just count

Select employee.id,count(employee. Id), employee.name
From employee_database 
Group by employee.id, employee.name 
Having count (employee.id) >1

这可能会对您有所帮助。正如伊戈尔提到的那样。

Select 
      e1.id,
      e1.name,
      e2.id as DupEmployeeID,
      e2.name as DupEmployeeName
   From 
      employee e1
         JOIN employee e2
            on e1.name = e2.name
           AND e1.id < e2.id
   order by
      e1.name

示例数据

EmployeeID   Name
1            Bill
2            Mary
3            Paul
4            Bill
5            Joe
6            Mary
7            Sandy
8            Mary

现在,这将起作用并且可能需要调整,因为公共部分(名称)上的 self-join,并且第一个 table 的 ID 小于第二个,将防止比较

1 Bill   4 Bill
4 Bill   1 Bill  (this one will NOT be shown as the instance already counted for

但在像 Mary 这样的情况下,你会得到

2 Mary  6 Mary
2 Mary  8 Mary
6 Mary  8 Mary

现在,这可能不那么实用,但如果文件中有其他信息,如地址、phone 等,您可以将这些相应的列拉入查询,就像我用原始和“DupEmployee”列。

反馈。

我想我得到了你要找的东西,根据你给我评论的格式化回复,我得到了

EmployeeID Name  Count 
1          Bill  2 
4          Bill  2 
2          Mary  3 
6          Mary  3 
8          Mary  3 
5          Joe   1 
3          Paul  1 
7          Sandy 1 

这是所有名称的列表以及该名称的实例数。排序的基础是任何有 1 个以上的人首先出现并按计数顺序出现。在该顺序中,列出名称字母顺序。因此,由于我的示例中有 2 个“Bill”名称,所以首先出现的不止一个。与第二个“Mary”和每个条目类似,最后是所有单独的名称实例。

为此,您需要 pre-query 姓名和计数,然后加入回原来的 table 喜欢

select
      e1.EmployeeID,
      e1.Name,
      NameGrp.NameCnt as count
   from
      employee e1
         join ( select
                      e2.Name,
                      count(*) as NameCnt
                   from
                      Employee e2
                   group by
                      e2.Name ) NameGrp
            on e1.Name = NameGrp.Name
   order by
      case when NameGrp.NameCnt > 1 then 1 else 2 end,
      NameGrp.NameCnt,
      e1.Name