sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008:odstraňte duplicitní řádky

Můžete DELETE z cte:

WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
             FROM Table)
DELETE FROM cte 
WHERE RowRank > 1

ROW_NUMBER() funkce přiřadí každému řádku číslo. PARTITION BY se používá k zahájení číslování každé položky v této skupině, v tomto případě každé hodnoty uniqueid začne číslovat od 1 a odtud půjde nahoru. ORDER BY určuje, v jakém pořadí čísla jdou. Protože každý uniqueid bude číslován od 1, každý záznam s ROW_NUMBER() větší než 1 má duplicitní uniqueid

Chcete-li porozumět tomu, jak ROW_NUMBER() funkce funguje, jen to vyzkoušejte:

SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid

Logiku ROW_NUMBER() můžete upravit funkce pro nastavení, který záznam si ponecháte nebo odstraníte.

Chcete-li to například provést v několika krocích, nejprve smažte záznamy se stejným příjmením, ale různými křestními jmény, můžete přidat příjmení do pole 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


  1. Implementujte upozornění na události MySQL zpět do aplikace Delphi

  2. Proč dostanu výjimku OutOfRange ve funkci GetOrdinal tohoto pole CLOB?

  3. Spuštění ProxySQL jako pomocného kontejneru na Kubernetes

  4. Připojte se ke mně na konferenci návrhářů databází PAUG