sql >> Database >  >> RDS >> Sqlserver

Hoe dubbele rijen in SQL Server te verwijderen?

Ik hou van CTE's en ROW_NUMBER aangezien de twee gecombineerd ons in staat stellen om te zien welke rijen zijn verwijderd (of bijgewerkt), verander daarom gewoon de DELETE FROM CTE... naar 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 (resultaat is anders; ik neem aan dat het te wijten is aan een typefout van jouw kant)

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

Dit voorbeeld bepaalt duplicaten met een enkele kolom col1 vanwege de PARTITION BY col1 . Als u meerdere kolommen wilt opnemen, voegt u ze gewoon toe aan de PARTITION BY :

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


  1. Schakel over van JsonStringType naar JsonBinaryType wanneer het project zowel MySQL als PostgreSQL gebruikt

  2. Verzameltijden van Spotlight Cloud-alarmen

  3. Hoe een mysql-database exporteren met behulp van de opdrachtprompt?

  4. Hoe een 32-bits SSIS-pakket in een 64-bits pakket uit te voeren?