Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere un valore simile in Oracle

Ecco una soluzione che funzionerebbe per MySQL. Utilizza una sottoquery correlata nella clausola select per raggruppare insieme Col2 valori. La logica è che aggreghiamo solo valori inferiori o uguali alla riga corrente, per un determinato gruppo di record che condividono lo stesso Col1 valore.

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;

Dimostrazione

Ecco la stessa query 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;

Dimostrazione

Nota che l'unico vero cambiamento è la sostituzione di LISTAGG per GROUP_CONCAT .