Wednesday, 12 March 2025

To delete duplicate records

 ✅ Using ROW_NUMBER() (Recommended)

WITH CTE AS (
SELECT EmployeeID, Salary, Department, ROW_NUMBER() OVER (PARTITION BY Salary, Department ORDER BY EmployeeID) AS RowNum FROM Employees ) DELETE FROM Employees WHERE EmployeeID IN ( SELECT EmployeeID FROM CTE WHERE RowNum > 1 );

🔹 Explanation:

  1. The ROW_NUMBER() function assigns a unique number to each duplicate row within the same (Salary, Department).
  2. PARTITION BY Salary, Department ensures numbering resets for each Salary & Department combination.
  3. ORDER BY EmployeeID determines which row to keep (lowest EmployeeID remains).
  4. The DELETE statement removes all rows where RowNum > 1, keeping only one record per (Salary, Department).

✅ Using DELETE with JOIN (Alternative)

DELETE E1 FROM Employees E1 JOIN Employees E2 ON E1.Salary = E2.Salary AND E1.Department = E2.Department AND E1.EmployeeID > E2.EmployeeID;

Explanation:

  • The self-join finds duplicate (Salary, Department).
  • It deletes the record where EmployeeID is greater, keeping the lowest EmployeeID.
SELECT EmployeeID, Salary, Department, ROW_NUMBER() OVER (PARTITION BY Salary, Department ORDER BY EmployeeID) AS RowNum FROM Employees;

No comments:

Post a Comment

Car pooling app

 I'll create a car pooling app with real-time vehicle tracking, pickup/drop time estimates, and a list of onboard users. Since we don...