2010-12-16 135 views
5

我有一個表,其中有48個記錄,稱爲Table1。其中只有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-table-in-table}就像它說的那樣。並非所有列都需要,但我不會在這裏解釋。

{list-of-key-columns]是用來定義什麼是重複的列。

{rule-to-determine-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值刪除重複行,並保留基於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

+0

如果這不起作用,那麼這意味着它們不完全重複,因爲區別會消除重複,您是否使用主鍵? – Raymund 2010-12-17 00:18:37

+0

我沒有使用主鍵,但我有一個名爲身份證的列是身份 – Sam 2010-12-17 15:58:53