SQL 列出所有重複的資料

情境說明

假設有一個員工的資料表 #Employee,其中有一個欄位 EmpName 記錄著員工的姓名,我們希望能夠查出在這張表內有哪些人的姓名是相同的,如下圖數據,我們期望可以找出 2 筆 Lawrence,有底下幾種常見的寫法。


  1. 若只是單純想找出,不重複的 EmpName,直接 Distinct 即可。
    Select Distinct EmpName 
    From #Employee

  2. 使用 Group By 來找出 EmpName 超過一筆以上的資料,並顯示實際的資料筆數。
    Select EmpName, Count(EmpName) as RecordCount 
    From #Employee 
    Group By EmpName 
    Having count(EmpName) > 1

  3. 查出單位內所有重複姓名的人完整資料表數據
    Select * 
    From #Employee 
    Where EmpName in (Select EmpName From #Employee Group By EmpName Having count(EmpName) > 1 ) 
    -- or 
    Select * 
    From #Employee main
    Where (Select Count(EmpName) From #Employee sub where main.EmpName = sub.EmpName ) >1


建立本文範例資料表

相關語法如下參考,使用完畢記得刪除不要的測試資料表喔。

-- 建立測試資料表
CREATE TABLE #Employee ( EmpNo varchar(10),  EmpName nvarchar(20))

-- 建立測試資料
Insert Into #Employee values('001', N'Lawrence')
Insert Into #Employee values('002', N'Olivier')
Insert Into #Employee values('003', N'Lawrence')
Insert Into #Employee values('004', N'Lawrence Shen')
Insert Into #Employee values('005', N'John')
Insert Into #Employee values('006', N'Amber')
Insert Into #Employee values('007', N'Joyce')
Insert Into #Employee values('008', N'Lawrence')
Insert Into #Employee values('009', N'Lawrence Shen')

-- 刪除測試資料表 
Drop Table #Employee


明天我會記錄一下,另外一個常見的情境,找出最高學歷的問題

留言