2014-03-02 239 views
0

如何从SQL Server中删除表中的重复记录?如何从SQL Server中的表中删除重复的记录?

+0

需要更多的信息。记录是否重复,或者是否需要合并数据(即一个记录与两行中的列)。另外,您需要某种键来识别记录。 – Sparky

+0

可能重复[如何删除重复行?](http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows) – Trikaldarshi

+0

提供全部信息,如表模式,重复类型全行重复或一些字段是重复的,sql版本等 – Shell

回答

1
WITH CTE AS(
    SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7], 
     RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1) 
    FROM dbo.Table1 
) 
DELETE FROM CTE WHERE RN > 1 

Example

0

以下问题和给出的答案有可能是你

Remove Duplicate Records

可以选择分和ROWID的最大最好的帮助(如果有和标识字段,否则增加一个)

DELETE MyTable 
FROM MyTable 
LEFT OUTER JOIN (
    SELECT MIN(RowId) as RowId, Col1, Col2, Col3 
    FROM MyTable 
    GROUP BY Col1, Col2, Col3 
) as KeepRows ON 
    MyTable.RowId = KeepRows.RowId 
WHERE 
    KeepRows.RowId IS NULL 
Use 

Source

+0

最好是标记为复制比复制另一个答案整体销售。 –

2

要删除行的组合col_1, col_2, ... col_n重复的行,可以使用公用表表达式;

WITH cte AS (
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY col1, ..., col_n ORDER BY col_1) AS rn 
    FROM table_1 
) 
DELETE FROM cte WHERE rn<>1; 

由于行是通过列出列的内容进行分类,如果行是在各方面是相同的,你仍然需要列出查询中的所有列。

与往常一样,在运行之前进行测试和/或备份,从因特网上的随机人员中删除生产数据。

0

添加标识列到表:

Alter table tbl_name add Id int identity(1,1) 

然后从表中删除记录运行以下查询:

Delete from tbl_Name where Id not in(select min(Id) from tbl_Name group by RowId) 
0
//duplicate_data_table contains duplicate values 

create temp as (select distinct * from duplicate_data_table); 

    drop duplicate_data_table; 

create duplicate_data_table as (select * from temp); 

    drop temp;