Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie lösche ich doppelte Zeilen in SQL Server?

Ich mag CTEs und ROW_NUMBER Da die beiden zusammen es uns ermöglichen zu sehen, welche Zeilen gelöscht (oder aktualisiert) werden, ändern Sie einfach den DELETE FROM CTE... zu SELECT * FROM CTE :

WITH CTE AS(
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1

DEMO (Ergebnis ist anders; ich nehme an, dass es an einem Tippfehler Ihrerseits liegt)

COL1    COL2    COL3    COL4    COL5    COL6    COL7
john    1        1       1       1       1       1
sally   2        2       2       2       2       2

Dieses Beispiel bestimmt Duplikate anhand einer einzelnen Spalte col1 wegen der PARTITION BY col1 . Wenn Sie mehrere Spalten einschließen möchten, fügen Sie sie einfach zu PARTITION BY hinzu :

ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)