In Oracle ueber Zeilen hinweg Strings verbinden

Auch nett…

wer weiss wofuer man es mal gebrauchen kann.

Gegeben sei folgende Tabelle:

SQL> SELECT deptno, ename FROM emp ORDER BY deptno, ename;

DEPTNO ENAME
------ ----------
    10 CLARK
    10 KING
    10 MILLER
    20 ADAMS
    20 FORD
    20 JONES
    20 SCOTT
    20 SMITH
    30 ALLEN
    30 BLAKE
    30 JAMES
    30 MARTIN
    30 TURNER
    30 WARD

14 rows selected.

Wir moechten jetzt die Employees zu einem department aber in je einer Zeile haben. Man nehme: wm.concat aus wmsys

SELECT deptno,wmsys.wm_concat(ename) as concatenated FROM dept group by deptno;

    DEPTNO CONCATENATED
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
...

Ist doch schick, oder ?

 

[Update 2017-04-25]: Habe das heute mal wieder gebraucht. wm_concat ist wohl nicht mehr vorhanden. Stattdessen gibt es was offizielles. Funktioniert fast genau so: listagg. Hier ein adaptiertes Beispiel:

SELECT deptno,wmsys.listagg(ename,', ') within group (order by ename) as concatenated FROM dept group by deptno;

Man kann sogar den Delimiter mit angeben (hier ein ,) und sortieren…

Kommentare

9 Antworten zu „In Oracle ueber Zeilen hinweg Strings verbinden“

  1. blumshuett

    Genau das habe ich gesucht, perfekt !!!

  2. Joe

    Sei vorsicht mit der Funktion wm_concat.

  3. Tim

    Was ist diese dept group? damit kann ich leider nichts anfangen

  4. DEPT ist eine Beispieltabelle die bei der Standard-Oracle-Installation dabei ist. das Group gehört zum „GROUP BY“

  5. Tim

    okay danke was ist dann hier noch falsch? und was muss ich bei dname einsetzen?? hier sind mal beide selects, der erste funktioniert ja schonmal
    SELECT DEPARTMENT_ID, LAST_NAME FROM EMPLOYEES_COPY ORDER BY DEPARTMENT_ID, LAST_NAME;

    SELECT DEPARTMENT_ID,wmsys.wm_concat(dname) DEPARTMENT_ID FROM EMPLOYEES_COPY group by DEPARTMENT_ID;

  6. Na dname ist die Spalte bei Dir, Die Du concatinieren willst. Da ich Dein Tabellenkonstrukt nicht kenne, kann ich Dir da jetzt auch keinen SQL zusammenzaubern 🙁

  7. A

    woher bzw wie bekomme ich die Prozedur wm_concat, da ich diese nicht besitze kommt bei mir immer der Fehler: ungültiger Bezeichner

  8. Die wm_concat ist eine undokumentierte Funktion in der Oracle 10g. Sollte man nicht produktiv einsetzen (Siehe Kommentar von Joe).

  9. Ragnar

    Super Tipp. Hat mir Stunden an Arbeit gespart. Danke!

Schreibe einen Kommentar

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..