2010-12-16 33 views
5

Mam tabelę o nazwie Tabela 1, która ma 48 rekordów. Z tego tylko 24 powinno tam być w tym stole. Z jakiegoś powodu wprowadziłem do niego duplikaty rekordów. Jak usunąć duplikaty rekordów z tej tabeli.Usuwanie duplikatów rekordów z tabeli

+2

Jeśli jest tylko 48, załaduj SSMS i usuń je ręcznie. –

Odpowiedz

5

Oto coś można spróbować czy wersja SQL Server 2005 lub później.

WITH cte AS 
    (
    SELECT {list-of-columns-in-table}, 
     row_number() over (PARTITION BY {list-of-key-columns} ORDER BY {rule-to-determine-row-to-keep}) as sequence 
    FROM myTable 
    ) 

DELETE FROM cte 
WHERE sequence > 1 

Używa wspólnego wyrażenia tabelowego (CTE) i dodaje kolumnę sekwencji. {list-of-columns-in-table} jest taki, jak określa. Nie wszystkie kolumny są potrzebne, ale nie wyjaśnię tutaj.

{Lista-kluczy-kolumn] to kolumny używane do definiowania duplikatu.

{rule-to-określić-wiersz-to-keep} jest sekwencją tak, że pierwszy wiersz jest wierszem, który należy zachować. Na przykład, jeśli chcesz zachować najstarszy wiersz, użyjesz kolumny daty dla sekwencji.

Oto przykład zapytania z prawdziwymi kolumnami.

WITH cte AS 
    (
    SELECT ID, CourseName, DateAdded, 
     row_number() over (PARTITION BY CourseName ORDER BY DateAdded) as sequence 
    FROM Courses 
    ) 

DELETE FROM cte 
WHERE sequence > 1 

Ten przykład usuwa zduplikowane wiersze na podstawie wartości CoursName i utrzymuje najstarszy basesd na wartość DateAdded.

0

http://support.microsoft.com/kb/139444

Ta sekcja jest klucz. Punkt pierwotny punkt należy zabrać. ;)

W tym artykule opisano, jak znaleźć i usunąć duplikaty kluczy podstawowych z tabeli. Należy jednak dokładnie przeanalizować proces, który umożliwił wykonanie duplikatów , aby zapobiec powtarzaniu się.

Identyfikuj swoje rekordy, grupując dane według kluczy logicznych, ponieważ oczywiście ich nie zdefiniowałeś i na końcu użyłeś instrukcji HAVING COUNT (*)> 1. Artykuł wnika w to dogłębnie.

0

Jest łatwiejszy sposób

Select * Into #TempTable FROM YourTable 
Truncate Table YourTable 
Insert into YourTable Select Distinct * from #TempTable 
Drop Table #TempTable 
+0

Nie działa Dude. Wciąż ma 48 rekordów po wykonaniu tego – Sam

+0

Jeśli to nie działa, oznacza to, że nie są dokładnie duplikowane, ponieważ odmienność wyeliminowałaby duplikaty, czy używasz klucza podstawowego? – Raymund

+0

Nie używam klucza podstawowego, ale mam kolumnę o identyfikatorze, która jest tożsamością – Sam

Powiązane problemy