保留部分删除的重复数据

时间:2012-02-26 01:39:14

标签: oracle

我希望基于名为“CID”的字段(customer_Id字段)从表中删除重复项但是我需要保留要删除的行中的值并将其作为新字段添加到剩余的uniqe行/条目。

EG:

CID颜色
 A12蓝色
 A12绿色
 A13红色

看起来像这样:

CID Color NewColor2
A12蓝绿色
A13红色

1 个答案:

答案 0 :(得分:0)

以下查询将为您提供最大数量的不同颜色,因此您可以创建必填字段:

select max(count(distinct color))
  from MY_TABLE
 group by CID;

我会在表格中添加一个_rank字段,因此区分记录要容易得多:

alter table MY_TABLE add (_rank number(10));

update MY_TABLE set _rank = rank() over (partition over CID order by color);

alter table MY_TABLE add constraint ukx unique (CID, _rank);

然后对每个字段color2,color3,color4 ....执行以下查询。

update MY_TABLE x 
   set x.color2 = 
       (select y.color 
          from MY_TABLE y
         where x.CID = y.CID
           and y._rank = 2)
 where x._rank = 1;

最后:

delete from MY_TABLE where _rank != 1;

alter table MY_TABLE drop (_rank);