2012-10-15 182 views
1

這是我正在嘗試解決的一種情況。我有一個加載了重複的表格。它發生的原因是類似的行從兩個不同的來源加載。這在包裝中正在被照顧。刪除腳本SQL Server 2008

但我想刪除那些重複的行。這裏沒有關鍵屬性(我不能使用沒有PK)。這兩個來源是克利夫蘭市和俄亥俄州。我有一列顯示從哪個源加載行(DataSource列)。

因此在行中顯示爲DataSource = 'Cleveland'DataSource = 'OhioState'

下面是我堅持使用的示例。你們可以有不同的方法來刪除這些行我的工作似乎並不好嗎?再次感謝你們。我不認爲我想辦法的方式是正確的,甚至...

IF OBJECT_ID('tempdb..#Ohio') IS NOT NULL 
    BEGIN 
    DROP TABLE #Ohio 
    END 

    ;WITH Oh AS 
    (SELECT ROW_NUMBER()OVER 
     (
     PARTITION by UID,ADDRESS,CITY,STATE,Zip 
      ORDER BY 
      UID 
     ) AS IA,UID,ADDRESS,City,State,Zip FROM F_staRes 
    ) 
    SELECT * INTO #Ohio FROM Oh WHERE IA> 1 AND DataSource='Ohio' 

    IF OBJECT_ID('tempdb..#Clevland') IS NOT NULL 
    BEGIN 
    DROP TABLE #Clevland 
    END 

    ;WITH Cle AS 
    (SELECT ROW_NUMBER()OVER 
     (
      PARTITION by UID,ADDRESS,CITY,STATE,Zip 
     ORDER BY 
     UID 
     ) AS CE,UID,ADDRESS,City,State,Zip FROM F_staRes 
     ) 
    SELECT * INTO #Clevland FROM Cle WHERE CE> 1 AND DataSource!='Ohio' 

    select * from #Clevland--I want to delete this records 
    Intersect 
    select * from #Ohio 
+1

如何將具有不同子句的數據複製到另一個表/數據庫並刪除原始數據。也許不是一個選項? –

+0

@ daniel_aren,我很欣賞你的回覆,但是它有一個與其他不同的屬性。再次感謝。 –

+0

也許這個鏈接可能有幫助。 http://support.microsoft.com/kb/139444 –

回答

0

也許它會幫助你

;WITH cte AS 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY UID, ADDRESS, City, State, Zip, DataSource ORDER BY UID) AS Dup 
    FROM dbo.F_staRes 
) 
DELETE cte 
WHERE Dup > 1 
+0

Fedoren,感謝您的回覆,但這會刪除所有這些,但我想刪除的是由城市負載導致的重複項,我發現它涉及到很多的加入..嘿,你們還可以對此表示感謝,再次感謝你們 –

1
  1. 我認爲最關鍵的詞INTERSECT使用不當。解釋如下。您可以按照鏈接獲取詳細信息。

EXCEPT從左側查詢中返回任何不在正確查詢中找到的不同值。 INTERSECT返回由兩個左邊的查詢和交叉操作的右側

http://msdn.microsoft.com/zh-cn/library/ms188055.aspx

  1. 返回來實現你的perpose任何不同的值,你可以嘗試的命令合併。

    ; 
    merge into #Clevland as target 
    using #Ohio as source 
    on (target.UID = source.UID) -- you could add ADDRESS,City,State,Zip 
    when not matched 
        insert into target (UID) values (source.UID) 
    ; 
    

願望,這將幫助。

+0

,再次感謝你們的緊急回覆。我發現我有很多連接到這張F表上的8個以上的表,我想刪除那些已經從俄亥俄州加載的記錄,並且在Clev的加載完成後變成重複的(這非常重要)我感謝你的見解......感謝你們 –