Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите подобна стойност в Oracle

Ето решение, което би работило за MySQL. Той използва корелирана подзаявка в клаузата за избор, за да групира конкатенацията заедно Col2 стойности. Логиката е, че ние обобщаваме само стойности, които са по-малки или равни на текущия ред, за дадена група записи, споделящи един и същ Col1 стойност.

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;

Демо

Ето същата заявка в 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;

Демо

Обърнете внимание, че единствената реална промяна е заместването на LISTAGG за GROUP_CONCAT .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как най-добре да се сравни с 0 в PHP?

  2. Как да приложим система за вложени коментари?

  3. OUT или INOUT аргумент 1 за рутина xxx не е променлива или НОВА псевдопроменлива в тригера BEFORE

  4. Предупреждения за свързване при изграждане на приложение срещу mysql-connector-c/libmysqlclient/mysql C API

  5. Параметър на JDBC verifyServerCertificate=false свързва без необходимост от клиентско хранилище за ключове и хранилище за доверие