2014-06-25 107 views
0

在SQL Server上兩兩複製,下面的SQL會計算每我成對ORGID和FeatureID和具有相同的行數:刪除在SQL Server

SELECT  TOP (100) PERCENT COUNT(1) AS Total, OrgID, FeatureID 
FROM   Organisation.Tag AS t 
GROUP BY OrgID, FeatureID 
HAVING  (COUNT(1) > 1) 
ORDER BY Total DESC 

不過,我不感興趣的重複。什麼是SQL刪除重複項?

表本身包含以下字段:

[TagID] [int] IDENTITY(1,1) NOT NULL, 
[LastModified] [datetime] NOT NULL, 
[OrgID] [int] NULL, 
[FeatureID] [int] NOT NULL 
+0

他們是否相同的行?你的桌子是否有主/唯一鍵列? – Kaf

+0

是的,有相同的行但不是所有的行都是相同的,因爲它們根據orgid和featureid的不同而不同。有一個獨特的TagID; orgid和featureid是外鍵。 – CarneyCode

+0

重複內容是否由於錯誤而進入? (OrgID,FeatureID)是關係的候選邏輯關鍵字?什麼應用程序管理插入? –

回答

1

這裏有一種方法:

with todelete as (
     select t.*, row_number() over (partition by ordid, featureid 
            order by lastmodified desc) as seqnum 
     from organization.tag 
    ) 
delete from todelete 
    where seqnum > 1; 
+0

我得到:排序函數「row_number」必須有一個ORDER BY子句 - 我甚至改變ordid到orgid – CarneyCode

+0

只需添加'order by'子句,如:'(由ORDID分區,功能ORDER BY LastModified)' – Kaf

+0

好的,以下沒有它:WITH CTE AS(SELECT 標籤識別, FeatureID和, ORGID, ROW_NUMBER()OVER(PARTITION BY FEATUREID,ORGID ORDER BY上次更改時間)AS SEQNUM FROM Organisation.Tag) DELETE FROM CTE WHERE SEQNUM> 1 – CarneyCode