如何从表

时间:2017-02-16 23:37:39

标签: sql

我正在努力将数据提取到一个表中,该表有两个数据集加载到临时表,最后插入表中。有2条记录是重复的,但如果它们在一列上的值相同,我需要两条记录,否则删除它。 Col1和col4是主键

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

我想要的是忘记col 2和col3,如果第1行和第2行相同则检查col1它应该检查col4,如果row1和row2不同,它应该显示row1和row2,即使第2行col4中的第3行是相同的。因此,如果记录是我提到的,它应该允许所有4个值但是我写的逻辑是返回row1,row3,row4,因为它正在考虑col1的row2和row3与col4的第2行第3行并且仅显示3记录,但我想要所有记录。请帮我看看如何在sql中为这种情况编写逻辑。

1 个答案:

答案 0 :(得分: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