2013-11-05 162 views
2

我想刪除重複項,但它們不顯示爲重複項。 有沒有一個查詢來幫助消除這一點,只留下一個背後?刪除倒置的重複項 - SQL Server

enter image description here

+2

那麼哪個是正確的離開?既不像司機的名字? –

+0

這兩者中的任何一個都可以保留 – user2955297

+1

您是否想在「SELECT」查詢中「移除」重複項,或者是否要對錶本身進行修改?您是否有興趣防止這些重複被首先引入?我們需要你選擇一個要保留的規則 - 你可能不會在意,但一般來說,在SQL中,你必須明確規則 - 所以如果你真的做出決定會更好。 –

回答

0

像這樣的事情會組排序的順序行由兩個領域,刪除除了一個以外 我假設這兩個字段必須匹配,並且您有一個名爲TableId的主鍵。

DELETE 
    T 
FROM 
    [Table] T 
JOIN (
    SELECT 
     TableId, 
     [Name], 
     ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY TableId DESC) RowId 
    FROM (
     SELECT 
      TableId, 
      Reg_Num + '|' + Driver_Name AS [Name] 
     FROM 
      [Table] 
     WHERE 
      Reg_Num <= Driver_Name 
     UNION 
     SELECT 
      TableId, 
      Driver_Name + '|' + Reg_Num AS [Name] 
     FROM 
      [Table] 
     WHERE 
      Driver_Name < Reg_Num 
     ) Y 
    ) X ON 
     X.TableId = T.TableID 
WHERE 
    RowId > 1 
2

這個查詢將產生標準化的值(如果他們都VARCHAR處理),你現在可以檢查重複對

select 
    [someId], 
    case 
     when reg_num < driver_name then reg_num + driver_name 
            else driver_name + reg_num 
    end as combination