ThaiSQL.COM Wiki and Forum

RSS


Quick Search
»
Advanced Search »

HostedBy
สวัสดีครับ วันนี้ผมขอนำเสนอวิธีการค้นหาข้อมูลที่ซ้ำกัน แล้วทำการลบออก โดยที่ไม่สนใจว่าจะต้องลบแถวไหน ดังนั้นถ้ามีซ้ำกันก็ลบที่ซ้ำออกเลยอันเดียวเลยนะครับ โดยใช้ ROW_NUMBER() ร่วมกับ PARTITION BY นะครับ สามารถใช้ได้ทั้ง SQL Server 2005 และ SQL Server 2008 นะครับ ยังไงก็ลองดูละกันนะครับ

จาก sqlauthority

CREATE TABLE TEMP
(
	Col1 INT,
	Col2 INT
)

GO

INSERT INTO TEMP
SELECT 1, 1
UNION ALL
SELECT 1, 1
UNION ALL
SELECT 1, 1
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 2
UNION ALL
SELECT 1, 3
UNION ALL
SELECT 1, 4

GO

SELECT * FROM TEMP

GO

WITH CTE(Col1, Col2, DuplicateCount)
AS(
	SELECT Col1
		, Col2
		, ROW_NUMBER() OVER(PARTITION BY Col1, Col2 ORDER BY Col1) AS DuplicateRow
	FROM TEMP
)

DELETE FROM CTE WHERE DuplicateRow > 1

SELECT * FROM TEMP

DROP TABLE TEMP