2012-10-15 49 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的加载完成后变成重复的(这非常重要)我感谢你的见解......感谢你们 –