Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eliminare le righe duplicate in SQL Server?

Mi piacciono i CTE e ROW_NUMBER in quanto i due combinati ci permettono di vedere quali righe vengono cancellate (o aggiornate), quindi basta cambiare il DELETE FROM CTE... a 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 (il risultato è diverso; presumo che sia dovuto a un tuo errore di battitura)

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

Questo esempio determina i duplicati in base a una singola colonna col1 a causa del PARTITION BY col1 . Se vuoi includere più colonne, aggiungile semplicemente a PARTITION BY :

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