这是我想要解决的情况。我有一个加载了重复的表。之所以发生这种情况,是因为从两个或多个不同的来源加载了类包装中正在处理这个问题。
但我想删除那些重复的行。这里没有关键属性。来源示例包括Cleveland City
和Ohio 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')
答案 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