2011-10-25 31 views
1

我正在使用Oracle 10g。如何獲取具有多個員工編號的員工的重複名稱

如果我有以下重複的行(同一員工有兩個僱員人數):

Employee_No  Employee_Name  ID_NO 
---------------------------------------------- 
0002345   John Debb   100345642 
0030988   John Debb   100345642 
---------------------------------------------- 

我想要得到的結果爲:

Employee_No_1  Employee_No_2  Employee Name ID_NO 
---------------------------------------------------------------- 
0002345   0030988   John Debb  100345642 
---------------------------------------------------------------- 

是否有可能是在SQL中完成?或者它需要PL/SQL?該查詢會是什麼?

回答

3

不太格式要求,但這會處理這種情況有可能會比僅2重複以上的情況。

SELECT e.Employee_No, e.Employee_Name, e.ID_NO 
    FROM (SELECT Employee_Name, ID_NO 
       FROM Employee 
       GROUP BY Employee_Name, ID_NO 
       HAVING COUNT(*) > 1) q 
     INNER JOIN Employee e 
      ON q.Employee_Name = e.Employee_Name 
       AND q.ID_NO = e.ID_NO 
    ORDER BY e.Employee_Name, e.ID_NO, e.Employee_No 
+0

+1表示可擴展性 – JNK

+0

格式不同,但可以接受。我喜歡它,謝謝 –

6
SELECT MIN(Employee_no), MAX(employee_no), Employee_name, id_no 
FROM Employee 
GROUP BY Employee_name, id_no 
HAVING MIN(employee_no) <> MAX(employee_no) 

我不做甲骨文,但我認爲這是非常通用的語法,應該工作。

+1

不錯的答案+1。 –

+0

@bilal我認爲這個邏輯應該沒有任何問題。但仍然可以嘗試刪除having子句。但是這個邏輯只適用於兩個重複的員工編號。 –

+0

@Babu - 這只是爲了過濾掉沒有任何重複的僱員。 – JNK

1

查詢如下,

select e1.employee_no, e2.employee_no, e1.employee_name, e1.id_no 
from employee e1 
join employee e2 
    on e1.id_no = e2.id_no 
where e1.employee_no < e2.employee_no 
+0

正是我需要的。謝謝! –

相關問題