2014-03-02 156 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;