Сохранение части удаленных дубликатов данных - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь удалить дубликаты из таблицы на основе поля с именем "CID" (поле customer_Id), НО мне нужно сохранить значения из строки, которую нужно удалить, и добавить ее в качестве нового поля в оставшуюся уникальную строку / запись.

EG:

CID Цвет
A12 Blue
A12 Зеленый
A13 Красный

будет выглядеть так:

CID Color NewColor2
A12 сине-зеленый
A13 Красный

1 Ответ

0 голосов
/ 28 февраля 2012

Следующий запрос даст вам максимальное количество различных цветов, чтобы вы могли создать обязательные поля:

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);    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...