在SQL Server 2008中重复

时间:2012-10-18 20:48:03

标签: sql-server-2008

  

可能重复:
  Delete script SQL Server 2008

这是我想要解决的情况。我有一个加载了重复的表。之所以发生这种情况,是因为从两个或多个不同的来源加载了类包装中正在处理这个问题。

但我想删除那些重复的行。这里没有关键属性。来源示例包括Cleveland CityOhio State。我有一个列,显示从(DataSource列)加载行的源。

因此在行中显示为DataSource = 'Cleveland'DataSource = 'Ohio'

我想保留那些从俄亥俄州加载时导致重复的记录。它的100k记录我可能不得不使用连接。还有一件事,我的主表与其他四个或五个表rId连接,每个行都是唯一的,这就是为什么你看到我加入这个表,我不认为我做得对。

你能检查一下我的工作吗?我非常欣赏它。

 --Delete ct from--this is to delete w/c is my main intention
 SELECT * 
 FROM
  (
     (
        SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource  
        FROM F_staRes where dataSource='Ohio'
     ) O inner join
     (
           SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource  
           FROM F_staRes 
           where DataSource  in   ('Clev','Columbus')
     ) ct
          on O.UID=ct.UID and O.ADDRESS=ct.ADDRESS  and O.City=ct.City and   
          O.State=ct.State  and O.zip=ct.zip

            join dbo.ResOrig ro
            on ct.rId=ro.rId 

            join dbo.ResSta rs
            on ct.rId=rs.rId

            join dbo.ResDest rd 
            on ct.rId=rd.rId

           where ct.DataSource in ('Clev','Columbus')

1 个答案:

答案 0 :(得分:0)

试试这个

确保你有列来比较重复项,并按列排序你必须在你的情况下保持asc或desc我写的desc,首先尝试通过注释delete语句来选择行,它将显示它删除的行如果你没事,只需执行脚本

;WITH tbl_online AS (
SELECT *,ROW_NUMBER () OVER (
PARTITION BY UID,ADDRESS,City,State,Zip ORDER BY DataSource  DESC) AS Rnum
FROM F_staRes)
--SELECT *  FROM tbl_online WHERE Rnum >1
DELETE   FROM tbl_online WHERE Rnum >1