Hier ist eine Lösung, die für MySQL funktionieren würde. Es verwendet eine korrelierte Unterabfrage in der Auswahlklausel, um die Verkettung Col2
zusammenzufassen Werte. Die Logik ist, dass wir nur Werte aggregieren, die kleiner oder gleich der aktuellen Zeile sind, für eine bestimmte Gruppe von Datensätzen, die denselben Col1
teilen Wert.
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;
Hier ist die gleiche Abfrage in 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;
Beachten Sie, dass die einzige wirkliche Änderung darin besteht, LISTAGG
zu ersetzen für GROUP_CONCAT
.