用SQL語句去掉重複的記錄

keeking發表於2011-07-22
有兩個意義上的重複記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵欄位重複的記錄,比如Name欄位重複,而其他欄位不一定重複或都重複可以忽略。
1、對於第一種重複,比較容易解決,使用
        select   distinct   *   from   tableName
就可以得到無重複記錄的結果集。
如果該表需要刪除重複的記錄(重複記錄保留1條),可以按以下方法刪除
        select   distinct   *   into   #Tmp   from   tableName
        drop   table   tableName
        select   *   into   tableName   from   #Tmp
        drop   table   #Tmp
發生這種重複的原因是表設計不周產生的,增加唯一索引列即可解決。

2、這類重複問題通常要求保留重複記錄中的第一條記錄,操作方法如下
        假設有重複的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
        select   identity(int,1,1)   as   autoID,   *   into   #Tmp   from   tableName
        select   min(autoID)   as   autoID   into   #Tmp2   from   #Tmp   group   by   Name,Address
        select   *   from   #Tmp   where   autoID   in(select   autoID   from   #tmp2)
        最後一個select即得到了Name,Address不重複的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)
or
With Dups as
(
    select *, row_number() over (partition by Product_Code order by Product_Code) as RowNum
    from #prod
)


Delete from Dups where rownum > 1;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7899089/viewspace-702803/,如需轉載,請註明出處,否則將追究法律責任。

相關文章