Labels

Wednesday, May 4, 2011

How to delete duplicate records?

CREATE TABLE Employee
(
      EmpID INT,
      EmpName VARCHAR(100)
);
INSERT INTO Employee VALUES (1,'Anees');
INSERT INTO Employee VALUES (2,'Rick');
INSERT INTO Employee VALUES (3,'John');
INSERT INTO Employee VALUES (4,'Stephen');
INSERT INTO Employee VALUES (2,'Rick');
INSERT INTO Employee VALUES (3,'John');
INSERT INTO Employee VALUES (4,'Stephen');

WITH EmpRanks AS
(
      SELECT * , ROW_NUMBER() OVER (PARTITION BY EmpID ORDER BY EmpID) AS RankNum
      FROM Employee
)
DELETE FROM EmpRanks WHERE RankNum > 1
--OR
--We can also remove duplicate records using a co-related query but the table should have an identity column (for E.g. an ID column in the below example).
DELETE Employee WHERE ID < (SELECT MAX(ID) FROM Employee E2
WHERE E2.EmpID = Employee.EmpID
AND
E2.EmpName = Employee.EmpName)
--OR

Select Distinct * into TempEmployee from Employee
Delete from Employee
Insert into Employee
Select * from TempEmployee
Drop table TempEmployee
--OR
-- Logic:
SET NOCOUNT ON
SET ROWCOUNT 1
WHILE 1 = 1
   BEGIN
      DELETE   FROM Employee
      WHERE    EmpName IN (SELECT  EmpName
                               FROM    Employee
                               GROUP BY EmpName
                               HAVING  COUNT(*) > 1)
      IF @@Rowcount = 0
         BREAK ;
   END       
SET ROWCOUNT 0

No comments:

Post a Comment