Thứ Sáu, 11 tháng 2, 2011

Xoá những dòng có giá trị trùng của một hay nhiều cột

Giả sử có một danh mục, tên là duy nhất, có cột mã được phép trùng do không ràng buộc dữ liệu. Bây giờ muốn xoá tất cả những mã bị trùng, chỉ giữ lại một trong bất kỳ những mã trùng đó.

CREATE TABLE Test (Col1 CHAR(10), Col2 CHAR(10))

--Nhập dữ liệu

INSERT INTO Test(Col1, COl2) VALUES('001', 'Item 1')

INSERT INTO Test(Col1, COl2) VALUES('002', 'Item 2')

INSERT INTO Test(Col1, COl2) VALUES('001', 'Item 3')

INSERT INTO Test(Col1, COl2) VALUES('002', 'Item 4')



--Kiểm tra dữ liệu


SELECT * FROM Test

--Xoá dữ liệu trùng

;WITH CTE

AS
(
SELECT Col1, ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY Col1) AS Count
FROM Test
)

DELETE FROM CTE

WHERE Count > 1

--Kiểm tra dữ liệu

SELECT * FROM Test


--Xoá table Test
DROP Table dbo.Test


Tham khảo http://blog.sqlauthority.com/2009/06/23/sql-server-2005-2008-delete-duplicate-rows/

1 nhận xét: