【问题标题】:How to remove duplicate values from a table如何从表中删除重复值
【发布时间】:2017-02-17 08:21:27
【问题描述】:

我正在将数据拉到一个表中,该表有两个数据集加载到临时表中,最后插入到表中。有 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,检查 col1 如果第 1 行和第 2 行相同,它应该检查 col4,如果第 1 行和第 2 行不同,它应该显示第 1 行和第 2 行,即使第 2 行和 col4 中的第 3 行相同。因此,如果记录如我所述,它应该允许所有 4 个值,但是根据我编写的逻辑,它返回 row1、row3、row4,因为它正在考虑 col 1 的 row2 和 row3 以及 col 4 的第 2 行第 3 行并且只显示 3记录,但我想要所有记录。请帮我在这种情况下如何在sql中编写逻辑。

【问题讨论】:

  • 要清楚,你有一个 4 列的主键?!我建议跟进有关此表设计的问题。
  • col 1 和 col 4 是主键
  • 请添加想要的结果
  • 我很难遵循逻辑。你能输入你想要的结果吗?另外,请向我们展示您的尝试。
  • select row_number() over partition by col4 orderby col3 as rownum,col1,col2,col3,col4 from temptable group by col1,col2,col3,col4 where rownum=1 。是我试图从临时表中插入数据的逻辑,但这个逻辑只加载了 3 条记录。我想要我在表格中提到的所有四行

标签: sql


【解决方案1】:

根据我从你的问题中了解到的,你可以做这样的事情..

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

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 2013-04-12
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多