根据子查询删除重复项

时间:2017-07-19 14:38:51

标签: sql oracle

您好我有一张包含以下记录的表

    SEQ_VAL, ACC, TERR, SEG2, ORG_ID      
    273480  673015  59027   CA  521
    273481  673015  44027   US  521
    287582  323181  44027   US  521
    351420  323181  59027   CA  521
    287589  3228    44027   US  521
    287977  3229    44027   CA  521
    90990   6768    586709   US  521
    90966   6768    586709   US  521

我需要以下输出。我基本上需要删除每个acc和org_id的重复记录。对于每个acc和org_if,如果存在seg2 val CA和US的多个记录,我只需要保留US。如果每个CA和US都有一条记录,我也需要保留它们。

    SEQ_VAL, ACC, TERR, SEG2, ORG_ID      

    273481  673015  44027   US  521
    287582  323181  44027   US  521
    287589  3228    44027   US  521
    287977  3229    44027   CA  521
    90990   6768    586709   US  521

我正在使用下面的delete语句,并抛出以下错误。

  

SQL错误:ORA-01732:此视图上的数据操作操作不合法

Delete from (    
    SELECT abc.*,
       ROW_NUMBER ()
           OVER (PARTITION BY  ACC, ORG_ID
              ORDER     BY SEG2  DESC)
       seq_no
  FROM abc 
 ) a 
 where a.seq_no = 2

1 个答案:

答案 0 :(得分:0)

根据您的数据,此查询正常

Delete 
    from
             Table
WHERE RN 
    IN  (
Select RN  from  (
Select SEQ_VAL, ACC, TERR, SEG2, ORG_ID  ,
    Row_number()OVER(PARTITION BY ACC ORDER BY terr) RN from  @Table1)T WHERE RN = 1 
ORDER BY ACC DESC )