Vous pouvez DELETE
d'un cte :
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
Le ROW_NUMBER()
La fonction attribue un numéro à chaque ligne. PARTITION BY
est utilisé pour recommencer la numérotation de chaque élément de ce groupe, dans ce cas chaque valeur de uniqueid
commencera la numérotation à 1 et remontera à partir de là. ORDER BY
détermine l'ordre dans lequel les numéros vont. Puisque chaque uniqueid
est numéroté à partir de 1, tout enregistrement avec un ROW_NUMBER()
supérieur à 1 a un uniqueid
en double
Pour comprendre comment le ROW_NUMBER()
fonction fonctionne, essayez-la :
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Vous pouvez ajuster la logique du ROW_NUMBER()
fonction pour ajuster quel enregistrement vous allez conserver ou supprimer.
Par exemple, vous aimeriez peut-être le faire en plusieurs étapes, en supprimant d'abord les enregistrements avec le même nom de famille mais des prénoms différents, vous pouvez ajouter le nom de famille à la PARTITION BY
:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1