Sql 基于两列删除重复项

Sql 基于两列删除重复项,sql,oracle,duplicates,Sql,Oracle,Duplicates,我有这个表,我想要一个SELECT来排除标记的行。一般规则是: 如果有两行或多行controlname、brandname和grouptypes列相等 然后将行保留在groupname不是“Keine Zuordnung”的位置。 我能帮点忙吗? 谢谢大家! 这里有一种方法: select t.* from (select t.*, count(*) over (partition by controlname, brandname, grouptypes) as c

我有这个表,我想要一个SELECT来排除标记的行。一般规则是:

如果有两行或多行controlname、brandname和grouptypes列相等 然后将行保留在groupname不是“Keine Zuordnung”的位置。 我能帮点忙吗? 谢谢大家!

这里有一种方法:

select t.*
from (select t.*,
             count(*) over (partition by  controlname, brandname, grouptypes) as cnt
      from t
     ) t
where cnt = 1 or groupname <> 'Keine Zuordnung';

它使用窗口函数获取计数,然后获取逻辑的位置。

请以格式化文本而不是图像的形式发布数据。您是希望避免选择副本,还是希望从表中删除副本?无论您是需要删除还是仅选择但排除,结果应该是什么。-那么,如果像您所解释的那样存在重复行,但所有重复行都以“Keine Zoordung”作为组名,那么结果会是什么呢?是否删除或排除所有这些内容?或者只保留一个副本并删除或排除其他副本?@mathguy所有重复行的组名都是“Keine Zoordnung”。我只需要选择那些重复的,并且它们的组名不是“Keine Zoordnung”+那些不是重复的。
select t.*
from (select t.*,
             count(*) over (partition by  controlname, brandname, grouptypes) as cnt
      from t
     ) t
where cnt = 1 or groupname <> 'Keine Zuordnung';