Okt 07

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…

9 Responses to “In Oracle ueber Zeilen hinweg Strings verbinden”

  1. blumshuett sagt:

    Genau das habe ich gesucht, perfekt !!!

  2. Joe sagt:

    Sei vorsicht mit der Funktion wm_concat.

  3. Tim sagt:

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

  4. Joerg sagt:

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

  5. Tim sagt:

    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. Joerg sagt:

    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 sagt:

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

  8. Joerg sagt:

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

  9. Ragnar sagt:

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

Leave a Reply

You must be logged in to post a comment.

preload preload preload