L'esempio seguente usa T-SQL per eliminare le righe duplicate in SQL Server.
Per essere più specifici, elimina le righe duplicate ma ne conserva una. Quindi, se hai due righe identiche, ne cancella una e conserva l'altra. In altre parole, deduplica il tavolo.
Dati di esempio
Supponiamo di avere una tabella con i seguenti dati:
SELECT * FROM Pets;
Risultato:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | | 4 | Bark | Dog | | 4 | Bark | Dog | +---------+-----------+-----------+
Possiamo vedere che le prime due righe sono duplicate, così come le ultime tre righe.
Seleziona Duplicati
Prima di deduplicare la tabella, possiamo utilizzare la seguente query per vedere quale/i riga/e verranno eliminate:
WITH CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY PetId, PetName, PetType
ORDER BY PetId, PetName, PetType
) AS Row_Number
FROM Pets
)
SELECT * FROM CTE WHERE Row_Number <> 1;
Risultato:
+---------+-----------+-----------+--------------+ | PetId | PetName | PetType | Row_Number | |---------+-----------+-----------+--------------| | 1 | Wag | Dog | 2 | | 4 | Bark | Dog | 2 | | 4 | Bark | Dog | 3 | +---------+-----------+-----------+--------------+
Elimina i duplicati
Per eliminare i valori duplicati, possiamo modificare la query precedente sostituendo SELECT *
sull'ultima riga con DELETE
:
WITH CTE AS
(
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY PetId, PetName, PetType
ORDER BY PetId, PetName, PetType
) AS Row_Number
FROM Pets
)
DELETE FROM CTE WHERE Row_Number <> 1;
Risultato:
(3 rows affected)
Il tavolo è stato ora deduplicato.
Possiamo verificarlo selezionando nuovamente tutte le righe:
SELECT * FROM Pets;
Risultato:
+---------+-----------+-----------+ | PetId | PetName | PetType | |---------+-----------+-----------| | 1 | Wag | Dog | | 2 | Scratch | Cat | | 3 | Tweet | Bird | | 4 | Bark | Dog | +---------+-----------+-----------+
Come previsto, una delle righe duplicate per il nostro cane "Wag" è stata eliminata e l'altra rimane. Anche due delle righe duplicate per "Bark" sono state eliminate. La tabella è stata deduplicata con successo.