【问题标题】:Remove duplicates based on two columns根据两列删除重复项
【发布时间】:2017-03-02 15:19:24
【问题描述】:

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

  • 如果有两行或多行 controlname AND brandname AND grouptypes 列相等
  • 然后保留 groupname 不是“Keine Zuordnung”的行。
CONTROLNAME   BRANDNAME   GROUPTYPES    GROUPNAME
ECU           AUDI        VERNETZER         1
ECU           AUDI        VERNETZER     Keine zuordnung    <--THIS
ECU           AUDI        FUSI          Keine zuordnung    <--THIS
ECU           AUDI        FUSI              2
ECU2          AUDI        FACHANWENDER  Keine zuordnung
ECU3          AUDI        FACHANWENDER  Keine zuordnung

请问我可以帮忙吗? 谢谢!

【问题讨论】:

  • 请将数据发布为格式化文本,而不是图像
  • 您要避免选择“重复”,还是要从表中删除“重复”?
  • 结果应该是什么(无论您是需要“DELETE”还是只需要“SELECT 但排除。”) - 所以,如果有像你这样的重复行,结果应该是什么解释了,但所有重复项都将'Keine zuordnung' 作为 GROUPNAME?删除(或排除)所有这些?还是只保留一份副本并删除(或排除)其他副本?
  • @mathguy 所有重复的行都将“K​​eine Zuordnung”作为 GROUPNAME。我只需要选择那些重复的并且他们的 GROUPNAME 不是'Keine Zuordnung' + 那些不重复的。

标签: sql oracle duplicates


【解决方案1】:

这是一种方法:

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

它使用窗口函数来获取计数,然后为您的逻辑使用where。

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 2021-03-20
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多