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

Wie kann ich doppelte Zeilen entfernen?

Unter der Annahme, dass keine Nullen vorhanden sind, GROUP BY die eindeutigen Spalten und SELECT das MIN (or MAX) RowId als die zu behaltende Zeile. Löschen Sie dann einfach alles, was keine Zeilen-ID hatte:

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

Falls Sie anstelle einer Ganzzahl eine GUID haben, können Sie

ersetzen
MIN(RowId)

mit

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