Oracle 保留已删除重复数据的一部分

Oracle 保留已删除重复数据的一部分,oracle,Oracle,我希望根据名为“CID”(customer_Id field)的字段从表中删除重复项,但我需要保留要删除的行中的值,并将其作为新字段添加到剩余的uniqe行/条目中 例如: CID颜色 A12蓝色 A12绿色 A13红色 看起来是这样的: CID颜色新颜色2 A12蓝绿色 A13红色以下查询将为您提供最大数量的不同颜色,因此您可以创建所需的字段: select max(count(distinct color)) from MY_TABLE group by CID; 我会在表中添加一个

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

例如:

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

看起来是这样的:

CID颜色新颜色2
A12蓝绿色

A13红色

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

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);    

快速提示:为了在示例中保留空格,您可以选择文本并单击工具栏中类似于
{}
(代码示例)的按钮。表中是否存在
NewColor2
列?如果有3行具有相同的
CID
,该怎么办?您如何知道是删除“绿色”行还是删除“蓝色”行?或者将
CID
设置为A12、将
Color
设置为绿色、将
NewColor2
设置为蓝色也同样可以接受吗?否表yetc中不存在NewColor2字段-必须在查询期间创建该字段。可以将“蓝色”或“绿色”作为副本删除,只要它出现在NewColor2中即可。不会有多行具有相同的CID和相同的颜色…如果有重复的CID,则颜色将不同。对于最初的示例,很抱歉…我第一次访问此网站。示例已更正。谢谢,切兰。有重复的元组吗?例如两个(A12,蓝色)s?