Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie einen ähnlichen Wert in Oracle

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;

Demo

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;

Demo

Beachten Sie, dass die einzige wirkliche Änderung darin besteht, LISTAGG zu ersetzen für GROUP_CONCAT .