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