2010-12-16 3 views
5

У меня есть таблица под названием Table1, которая содержит 48 записей. Из них в этой таблице должно быть только 24. По какой-то причине я получил дубликаты записей. Как удалить дубликаты записей из этой таблицы.Удаление повторяющихся записей из таблицы

+2

Если есть только 48, загрузите SSMS и удалите их вручную. – 2010-12-16 23:00:39

ответ

5

Вот то, что вы могли бы попробовать, если версия SQL Server 2005 является или более поздней версии.

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 

Это использует общее табличное выражение (CTE) и добавляет столбец последовательностей. {list-of-columns-in-table} точно так же, как и указано. Не все столбцы нужны, но я не буду здесь объяснять.

{list-of-key-columns] - это столбцы, которые вы используете для определения того, что является дубликатом.

{rule-to-define-row-to-keep} - последовательность, так чтобы первая строка была строкой. Например, если вы хотите сохранить самую старую строку, вы должны использовать столбец даты для последовательности.

Вот пример запроса с реальными столбцами.

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 

Этот пример удаляет повторяющиеся строки на основе значения CoursName и сохраняет старую basesd на величину DateAdded.

0

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

Этот раздел является ключевым . первичный пункт вы должны забрать. ;)

В данной статье описывается, как найти и удалить дубликаты первичных ключей от столика. Тем не менее, вы должны внимательно изучить процесс, который позволил бы дублировать , чтобы предотвратить повторение.

Определите свои записи, группируя данные по вашим логическим клавишам, так как вы, очевидно, их не определили, и применяя в конце инструкцию HAVING COUNT (*)> 1. В этой статье подробно говорится об этом.

0

Это простой способ

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

Не работает Чувак. Тем не менее у него есть 48 записей после этого – Sam 2010-12-16 23:26:51

Смежные вопросы