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
(
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