sql >> Databasteknik >  >> RDS >> Mysql

Hur man får ett liknande värde i Oracle

Här är en lösning som skulle fungera för MySQL. Den använder en korrelerad underfråga i select-satsen för att gruppera sammanfoga Col2 värden. Logiken är att vi bara aggregerar värden som är mindre än eller lika med den aktuella raden, för en given grupp av poster som delar samma Col1 värde.

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

Här är samma fråga i 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

Observera att den enda verkliga förändringen är att ersätta LISTAGG för GROUP_CONCAT .



  1. Returnera en rankning från flera tabeller med mySQL

  2. Oracle PL/SQL - samlingar (kapslade tabeller)

  3. Hur använder man mysqli-frågan med en separat connection.php-fil?

  4. Hur tar jag reda på om en oracle-databas är inställd på autocommit?