Oracle разделяет повторяющиеся строки на столбцы при объединении двух таблиц - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть 2 таблицы, подобные этой:

table_a

id  col2
1   A
1   B
2   A
2   B
3   B

table_b

id  col1
1    X
2    Y
3    Z

Я хочу объединить обе таблицы так, чтобы результирующий элемент содержал повторяющиесяЗначения строки в столбце таблицы 2 в виде столбцов.Каждый идентификатор не должен содержать более 3 значений table_a.col2.В этом примере таблица результатов будет выглядеть следующим образом:

result:

id col1 col2 col3 col 4
1   X    A    B    null
2   Y    A    B    null
3   Z    B    null null

Как этого добиться?Я знаю, что могу использовать listagg () для агрегирования всех строк в один столбец, например:

 select b.id, b.col1,
 listagg(a.col2, '_') within group (order by a.col2) as col2
 from table_b b join
 table_a a
 on b.id = a.id
 group by b.id, b.col1;

Это даст мне такой результат:

id col1 col2
1   X    A_B
2   Y    A_B
3   Z    B

1 Ответ

0 голосов
/ 06 февраля 2019

Вы можете использовать условное агрегирование:

select b.id, b.col1,
       max(case when seqnum = 1 then a.col2 end) as col2,
       max(case when seqnum = 2 then a.col2 end) as col3,
       max(case when seqnum = 3 then a.col2 end) as col4
 from table_b b left join
      (select a.*,
              row_number() over (partition by a.id order by a.col2) as seqnum
       from table_a a
      ) a
      on b.id = a.id
 group by b.id, b.col1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...