Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment supprimer les lignes en double dans SQL Server ?

J'aime les CTE et ROW_NUMBER comme les deux combinés nous permettent de voir quelles lignes sont supprimées (ou mises à jour), il suffit donc de changer le DELETE FROM CTE... à 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 (le résultat est différent ; je suppose que c'est dû à une faute de frappe de votre part)

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

Cet exemple détermine les doublons par une seule colonne col1 à cause de la PARTITION BY col1 . Si vous souhaitez inclure plusieurs colonnes, ajoutez-les simplement à la PARTITION BY :

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