объединение строк в 1 столбец - PullRequest
1 голос
/ 10 июня 2011

У меня есть таблица с 2 столбцами

Input
Col 1 ---- Col 2
1     ---- aaaa  
1     ---- bbbb
1     ---- cccc
2     ---- dddd
2     ---- eeee
2     ---- ffff
2     ---- gggg

Output

Col 1 ---- Col 2
1     ---- aaaabbbbcccc
2     ---- ddddeeeeffffgggg

Я думал о том, чтобы сделать несколько самостоятельных соединений, но это не кажется эффективным. Любые идеи о том, как sql должен быть написан?

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Хорошо, я укушу.Вместо stragg, попробуйте listagg (в 11.2):

create table tst1
(
pid number,
val varchar2(10)
);


insert into tst1 values(1, 'Rec1');
insert into tst1 values(1, 'Rec2');
insert into tst1 values(1, 'Rec3');
insert into tst1 values(2, 'Rec1');
insert into tst1 values(2, 'Rec2');
commit;


select pid, listagg(val, ':') within group(order by val) as "The List"
from tst1
group by pid;

И вы получите:

pid   The List
1     Rec1:Rec2:Rec3
2     Rec1:Rec2

Если вы измените порядок на "order by val desc", вы получите

pid   The List
1     Rec3:Rec2:Rec1
2     Rec2:Rec1
0 голосов
/ 18 июня 2011

Это версия, которая будет работать в Oracle 9i и выше.

create table foo (
  key_column number,
  val_column varchar2(4)
);

insert into foo values (1, 'aaaa');
insert into foo values (1, 'bbbb');
insert into foo values (1, 'cccc');
insert into foo values (2, 'dddd');
insert into foo values (2, 'eeee');
insert into foo values (2, 'ffff');
insert into foo values (2, 'gggg');


    select key_column
         , replace(max(sys_connect_by_path(val_column, ',')), ',') combined
      from (select key_column
                 , val_column
                 , row_number() over (partition by key_column order by val_column) cur
                 , row_number() over (partition by key_column order by val_column) - 1 prev
              from foo) foo
  group by key_column 
connect by prior cur = prev and prior key_column = key_column
start with cur = 1;

   key_column | val_column
  --------------------------
            1 | aaaabbbbcccc
            2 | ddddeeeeffffgggg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...