Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

Cancellazione dei record duplicati in SQL Server con le CTE

Riporto un utilissimo metodo di Pinal Dave per la cancellazione dei record duplicati in Sql Server con le CTE (Common Table Expressions). Le CTE sono state introdotte a partire da Microsoft SQL Server 2005.

Questo è l'articolo orginale:

http://blog.sqlauthority.com/2009/06/23/sql-server-2005-2008-delete-duplicate-rows/

Riassumo brevemente. Assumendo di avere una tabella:

CREATE TABLE DuplicateRcordTable (Col1 INT, Col2 INT)

contenente record con i valori Col1 e Col2 duplicati, è possibile eliminare i duplicati usando la query seguente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
WITH CTE (COl1,Col2, DuplicateCount)
AS
(
    SELECT COl1,Col2,
    ROW_NUMBER() OVER(PARTITION BY COl1,Col2 ORDER BY Col1) AS DuplicateCount
    FROM DuplicateRcordTable
)
DELETE
FROM CTE
WHERE DuplicateCount > 1
GO

Comments