Oto rozwiązanie, które działałoby dla MySQL. Używa skorelowanego podzapytania w klauzuli select do grupowania konkatenacji razem Col2
wartości. Logika jest taka, że agregujemy tylko wartości mniejsze lub równe aktualnemu wierszowi dla danej grupy rekordów dzielących ten sam Col1
wartość.
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;
Oto to samo zapytanie w 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;
Zauważ, że jedyną prawdziwą zmianą jest zastąpienie LISTAGG
dla GROUP_CONCAT
.