2010-12-16 19 views
5

私は48レコードを持つTable1というテーブルを持っています。そのうちの24個だけがそのテーブルになければなりません。何らかの理由で重複レコードが挿入されました。そのテーブルから重複したレコードを削除するにはどうすればいいですか?テーブルから重複レコードを削除する

+2

48個しかない場合は、SSMSをロードして手動で削除してください。 –

答えて

5

です。

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)を使用してシーケンス列を追加します。 {表内の列のリスト}は、その状態と同じです。すべての列が必要なわけではありませんが、ここでは説明しません。

{キーのリスト - リスト}は、重複するものを定義するために使用する列です。

{ルールを決定する行を保持する}は、最初の行が保持する行になるような順序です。たとえば、最も古い行を保持する場合は、シーケンスに日付列を使用します。

次に、実際の列を含むクエリの例を示します。

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値に基づいて重複行を削除し、DateAdded値最古basesdを保持します。

0

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

このセクションでは、キーです。 ポイントを削除してください。 ;)

この記事は を見つけ、 テーブルから重複した主キーを削除する方法について説明します。しかし、 は、 の重複が起こって再発を防ぐためのプロセスを調べる必要があります。

明らかにデータキーを定義していないため、論理キーでデータをグループ化し、最後にHAVING COUNT(*)> 1ステートメントを適用してレコードを識別します。記事はこれに深く入ります。

0

これは、ここでSQL Serverのバージョンが2005以降である場合は、試してみてください何か簡単な方法

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

うまく動作しません。それでもこれは48レコードを持っています – Sam

+0

これは動作しない場合、それは重複を排除すると、正確に重複していないことを意味します、主キーを使用していますか? – Raymund

+0

私はプライマリキーを使用していませんが、アイデンティティであるidというカラムがあります – Sam

関連する問題