2

如何根据单列找出重复的行。我在 oracle 中有一个表,其中包含如下所示的数据并且它有重复项。我正在尝试选择并查看具有重复员工 ID 的所有行,如下所述

电磁脉冲表:

EmpId Fname Lname Mname Jobcode Status exp_date

1      Mike Jordan A    IT      W      12/2014
1      Mike Jordan A    IT      A      12/2014
2      Angela ruth C    sales   P      12/2015
2      Angela ruth C    IT      W      12/2015
3      Kelly  Mike B    sales   W      12/2015

从上表中,我想选择所有重复 empid 的行,如下所示

EmpId Fname Lname Mname Jobcode Status exp_date

1      Mike Jordan A    IT      W      12/2014
1      Mike Jordan A    IT      A      12/2014
2      Angela ruth C    sales   P      12/2015
2      Angela ruth C    IT      W      12/2015

我怎样才能做到这一点?谢谢你!

4

2 回答 2

6
SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  EmpID
            FROM    TableName
            GROUP   BY EmpID
            HAVING  COUNT(*) > 1
        ) b ON a.EmpID = b.EmpID

另一种方法,虽然我更喜欢上面,是使用IN

SELECT  a.*
FROM    TableName a
WHERE   EmpId IN
        (
            SELECT  EmpId
            FROM    TableName
            GROUP   BY EmpId
            HAVING  COUNT(*) > 1
        ) 
于 2013-04-30T02:04:59.520 回答
2

这是另一个使用子查询的选项,COUNT OVER PARTITION BY因为您使用的是 Oracle 11:

SELECT * 
FROM (
  SELECT EmpId, Fname, Lname, Mname, Jobcode, Status, exp_date,
    COUNT(EmpId) OVER (PARTITION BY EmpId) EmpCount
  FROM    TableName 
  ) T
WHERE EmpCount > 1

SQL Fiddle 演示(借自 JW)

于 2013-04-30T02:14:20.650 回答