Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Połączenie zagregowanego ciągu w Oracle 10g

Oracle 11g ma tę fajną funkcję LITAGG, która jest prawie tym, czego chcesz, jednak ponieważ korzystasz z 10g, nie jest to dla ciebie dostępne (chyba że zdecydujesz się na uaktualnienie).

Jeśli z jakiegoś powodu nie chcesz (lub z jakichkolwiek powodów nie możesz) uaktualnić do 11g, sugeruję przyjrzenie się alternatywom dla LITAGG, które są dostępne na 10g.

Możesz sprawdzić niektóre z proponowanych alternatyw tutaj

Szybko dostosować szybką adaptację jednej z proponowanych alternatyw, aby dopasować ją do scenariusza przypadku:

WITH Q AS
(
    SELECT 'North' POD, 'Rony' NAME FROM DUAL  UNION ALL
    SELECT 'North',     'James'     FROM DUAL  UNION ALL
    SELECT 'North',     'Aby'       FROM DUAL  UNION ALL
    SELECT 'South',     'Sam'       FROM DUAL  UNION ALL  
    SELECT 'South',     'Willy'     FROM DUAL  UNION ALL
    SELECT 'West',      'Mike'      FROM DUAL
)
SELECT   POD,
         RTRIM(
            XMLAGG (XMLELEMENT(e, name||',') ORDER BY name).EXTRACT('//text()'),
            ','
         ) AS name
    FROM q
GROUP BY POD;

Pamiętaj jednak, że nie jest to właściwe rozwiązanie, ponieważ będziesz musiał dostosować je do swojego stołu (nie do fikcyjnego stołu DUAL) itp...

Twoje rozwiązanie prawdopodobnie będzie wyglądać mniej więcej tak:

SELECT   POD,
         RTRIM(
            XMLAGG (XMLELEMENT(E, NAME||',') ORDER BY NAME).EXTRACT('//text()'),
            ','
         ) AS NAME
    FROM tbl1
GROUP BY POD;

Jeśli chcesz zmienić ogranicznik, możesz zmienić go z przecinka w tej części:

(E, NAME||',')

RTRIM służy tylko do odcięcia końcowego przecinka z końca połączonego ciągu, jeśli nie przeszkadza ci końcowy przecinek, możesz pominąć funkcję RTRIM, aby zachować czytelność.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CASE WHEN w klauzuli WHERE kończy się niepowodzeniem z błędem braku słowa kluczowego

  2. Jak połączyć się z Oracle jako SYS z SQL*Plus w Javie?

  3. Błąd :ORA-00907:brak prawego nawiasu

  4. Jak mogę uniknąć zbyt długich błędów surowej zmiennej długości w programie SQL Developer?

  5. Czy SQLDeveloper obsługuje wykonywanie skryptów?