2017-02-16 101 views
0

我正在将数据拉到一个表中,该表中有两个数据集的数据加载到临时表并最终插入到表中。有2个记录是重复的,但我需要两个记录,如果他们的值在一列是相同的,否则删除它。 col1和COL4是主键如何删除表中的重复值

col1 col2 col3 col4 
-------------------- 
a  ab abc x 
a  ab abc y 
b  ab abc y 
b  ab abc z 

我想是忘了第2栏和COL3,检查COL1如果第1行和第2行是相同的,应该去检查COL4如果ROW1和第2行是不同的它应该即使col4中的第2行和第3行相同,也会同时显示第1行和第2行。所以如果记录正如我提到的那样,它应该允许所有4个值,但是用我写的逻辑返回row1,row3,row4,因为它正在考虑col1的row2和row3与col4的第2行第3行,并且只显示3记录,但我想要所有记录。请帮助我如何在这种情况下在sql中编写逻辑。

+0

要要清楚,你有4列主键?!我会建议关于这个表的设计的问题。 – Schwern

+0

col 1和col 4是主键 – Gee

+2

请添加所需的结果 – McNets

回答

0

基于我从你的问题的理解,你可以做这样的事情..

DELETE i 
FROM YourTable i INNER JOIN 
( 
SELECT col1,col4 
FROM YourTable 
GROUP BY col1,col4 
HAVING count(col2)>1 
) t ON t.col1 = i.col1 AND t.col4 = i.col4 

Live Demo Here

或者,如果欧想只保留一个记录和删除其他重复的记录,你可以做这样的..

;with cte as 
(
    SELECT *,row_number() over(partition by col1,col4 order by col1,col4) as rn 
    FROM YourTable 
) 

DELETE from cte where rn>1 

Live Demo Here