我正在努力将数据提取到一个表中,该表有两个数据集加载到临时表,最后插入表中。有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中为这种情况编写逻辑。
答案 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
或者如果你只想保留一条记录并删除其他重复记录,你可以这样做..
;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