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

Comment puis-je supprimer les lignes en double ?

En supposant qu'il n'y ait pas de valeur nulle, vous GROUP BY les colonnes uniques, et SELECT le MIN (or MAX) RowId comme ligne à conserver. Ensuite, supprimez simplement tout ce qui n'avait pas d'identifiant de ligne :

DELETE FROM MyTable
LEFT OUTER JOIN (
   SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
   FROM MyTable 
   GROUP BY Col1, Col2, Col3
) as KeepRows ON
   MyTable.RowId = KeepRows.RowId
WHERE
   KeepRows.RowId IS NULL

Si vous avez un GUID au lieu d'un entier, vous pouvez remplacer

MIN(RowId)

avec

CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))