Oracle PL / SQL-Перемещение дублирующихся строк в 1 строку - PullRequest
0 голосов
/ 20 марта 2019

у меня есть следующие строки в таблице.в этом случае столбцы atr можно использовать для любых других целей, поэтому я хочу переместить эти 3 строки в одну строку, переместив каждое уникальное sup_name в любой из столбцов atr.

Я хочу переместить записи столбца sup_name вего соответствующие отдельные столбцы, чтобы избежать избыточности.

CREATE TABLE dups
( dups_id number(10) NOT NULL,
  dups_name varchar2(50) NOT NULL,
sup_name varchar2(50)
  atr1 varchar2(50)
 atr2 varchar2(50)
 atr3 varchar2(50)
 atr4 varchar2(50)
);

    insert into dups(dups_id,dups_name,sup_name,atr1,atr2,atr3)
 values(1,'Resego Kebopetswe', 'resego231dty',null,null,null)
    insert into dups(dups_id,dups_name,sup_name,atr1,atr2,atr3)
 values(2,'Resego Kebopetswe', 'resego532dty',null,null,null)
    insert into dups(dups_id,dups_name,sup_name,atr1,atr2,atr3)
 values(3,'Resego Kebopetswe', 'resego420qas',null,null,null)

dups_id   dups_name          sup_name      atr1   atr2   atr3    
1         Resego Kebopetswe  resego231dty  null   null   null    
2         Resego Kebopetswe  resego532dty  null   null   null    
3         Resego Kebopetswe  resego420qas  null   null   null    

Я хочу, чтобы все закончилось, как показано ниже

dups_id   dups_name          sup_name      atr1          atr2          atr3    
1         Resego Kebopetswe  resego231dty  resego532dty  resego420qas  null 

1 Ответ

0 голосов
/ 20 марта 2019

В этом сводном запросе отображаются имена_поддержек для дублированного имени в atr1 ... atr4 столбцах.

select sup_name_id dups_id, dups_name, sup_name, atr1, atr2, atr3, atr4
  from (select dups_id, dups_name, sup_name, 
               row_number() over (partition by dups_name order by dups_id) rn 
          from dups d)
  pivot(min(dups_id) id, max(sup_name) for rn in (1 sup_name, 2 atr1, 3 atr2, 4 atr3, 5 atr4))

Демо-версия dbfiddle

DUPS_ID DUPS_NAME           SUP_NAME      ATR1          ATR2          ATR3     ATR4
------- ------------------  ------------  ------------  ------------  -------  --------
      1 Resego Kebopetswe   resego231dty  resego532dty  resego420qas

Если вы хотите обновить значения в своей таблице, используйте этот запрос в merge в качестве исходных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...