Как получить аналогичное значение в Oracle - PullRequest
0 голосов
/ 24 марта 2019

У меня есть таблица из двух столбцов

Col1  Col2
A        1
A        2
A        3
B        1
B        2
B        3

Вывод мне нужен, как это

Col1    Col2
A       1
A       1,2
A       1,2,3
B       1
B       1,2
B       1,2,3

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 24 марта 2019

Вот решение, которое будет работать для MySQL.Он использует коррелированный подзапрос в предложении select, чтобы сгруппировать объединенные значения Col2.Логика состоит в том, что мы агрегируем только значения, которые меньше или равны текущей строке, для данной группы записей, имеющих одно и то же значение Col1.

SELECT
    Col1,
    (SELECT GROUP_CONCAT(t2.Col2 ORDER BY t2.Col2) FROM yourTable t2
     WHERE t2.Col2 <= t1.Col2 AND t1.Col1 = t2.Col1) Col2
FROM yourTable t1
ORDER BY
    t1.Col1,
    t1.Col2;

enter image description here

Демонстрация

Этот же запрос в Oracle:

SELECT
    Col1,
    (SELECT LISTAGG(t2.Col2, ',') WITHIN GROUP (ORDER BY t2.Col2) FROM yourTable t2
     WHERE t2.Col2 <= t1.Col2 AND t1.Col1 = t2.Col1) Col2
FROM yourTable t1
ORDER BY
    t1.Col1,
    t1.Col2;

Демонстрация

Обратите внимание, что единственное реальное изменение - это замена LISTAGG на GROUP_CONCAT.

0 голосов
/ 27 марта 2019
with s (Col1, Col2) as (
select 'A', 1 from dual union all
select 'A', 2 from dual union all
select 'A', 3 from dual union all
select 'B', 1 from dual union all
select 'B', 2 from dual union all
select 'B', 3 from dual)
select col1, ltrim(sys_connect_by_path(col2, ','), ',') path
from s
start with col2 = 1
connect by prior col2 = col2 - 1 and prior col1 = col1;

C PATH
- ----------
A 1
A 1,2
A 1,2,3
B 1
B 1,2
B 1,2,3

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