2010-12-16 132 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