Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Aufzählung generieren

Dieses Thema im Forum "Oracle" wurde erstellt von Eckole, 2 August 2013.

  1. Eckole

    Eckole Neuer Benutzer

    Hallo,

    ich habe einen select auf Artikeldaten über mehrere Tabellen. Alle sind über die Artikel ID bzw. die Merkmal ID des Artikels miteinander verjoint.

    Nun bekomme ich pro Artikel eine Zeile mit all den Daten die ich benötige.

    Ich will nun eine weitere Tabelle verjoinen. Diese bringt aber mehrere Ergebnisse pro Artikel ID (Zeile).
    Da ich aber nicht mehrere Zeilen pro Artikel haben möchte sollen die Ergebnisse am besten Kommagetrennt in eine neue Spalte

    Tabellenkopf: (aktueller Select)
    Artikel ID -- Artikel Name -- Merkmal1 -- Merkmal2 -- usw.

    weitere Tabelle: (Artikel kann in folgende Verpackung gepackt werden)
    Artikel ID -- Verpackung
    1 ---------------- Karton
    1 ---------------- Tüte



    gewünschtes Ergebnis:
    Artikel ID -- Artikel Name -- Merkmal1 -- Merkmal2 -- usw. -- Verpackung
    1 -------------------- x -------------- x -------------- x ---------- xxx --- Karton, Tüte, ...


    Ich bin noch nicht so fit im SQL, dass mir hier eine Lösung einfällt.
    Ich hoffe mir kann jmd helfen?

    Vielen Dank
    Eckole
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du willst also die Dinge da aggregieren und als Komma-Liste ausgeben. In PostgreSQL würde ich das mit array_agg() und array_to_string() machen. Geht vermutlich in Oraggle ähnlich:

    Code:
    test=# create table eckole (t text);
    CREATE TABLE
    Time: 295,770 ms
    test=*# copy eckole from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> foo
    >> bar
    >> batz
    >> \;
    >> \.
    Time: 12155,522 ms
    test=*# select * from eckole ;
      t
    ------
    foo
    bar
    batz
    ;
    (4 rows)
     
    Time: 0,465 ms
    test=*# select array_agg(t) from eckole ;
        array_agg
    ------------------
    {foo,bar,batz,;}
    (1 row)
     
    Time: 0,700 ms
    test=*# select array_to_string(array_agg(t),',') from eckole ;
    array_to_string
    -----------------
    foo,bar,batz,;
    (1 row)
    
    Näheres bitte der Doku zu Oraggle entnehmen...

    Andreas
     
  3. Eckole

    Eckole Neuer Benutzer

    Vielen Dank für den Tip ... ich denke damit komm ich weiter
    das hab ich dazu gefunden
    Code:
    SQL> SELECT deptno
      2  ,      LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
      3  FROM  emp
      4  GROUP  BY
      5        deptno;
     
        DEPTNO EMPLOYEES
    ---------- ------------------------------------------------------------
            10 CLARK,KING,MILLER
            20 ADAMS,FORD,JONES,SCOTT,SMITH
            30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
     
    3 rows selected.
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden