Thứ Năm, 18 tháng 6, 2009

Remove duplicate rows from a table in SQL Server

1. Select ra các dòng bị trùng (duplicate primary key values)

SELECT col1, col2, count(*)

FROM t1

GROUP BY col1, col2

HAVING count(*) > 1


2. Đổ vào 1 bảng tạm holdkey

SELECT col1, col2, col3=count(*)

INTO holdkey

FROM t1

GROUP BY col1, col2

HAVING count(*) > 1


3. Giữ lại 1 giá trị của các dòng bị trùng, bằng SELECT DISTINCT và đổ vào table holddups.

SELECT DISTINCT t1.*

INTO holddups

FROM t1, holdkey

WHERE t1.col1 = holdkey.col1

AND t1.col2 = holdkey.col2


4.
DELETE tất cả các dòng bị trùng

DELETE t1

FROM t1, holdkey

WHERE t1.col1 = holdkey.col1

AND t1.col2 = holdkey.col2


5. Đổ ngược lại dòng được giữ trong holddups.

INSERT t1 SELECT * FROM holddups

Không có nhận xét nào: