Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como posso remover linhas duplicadas?


Assumindo que não há nulos, você GROUP BY as colunas exclusivas e SELECT o MIN (or MAX) RowId como a linha a ser mantida. Em seguida, basta excluir tudo o que não tinha um ID de linha:
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

Caso você tenha um GUID em vez de um inteiro, você pode substituir
MIN(RowId)

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