Aufzählung generieren

Eckole

Neuer Benutzer
Beiträge
2
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
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

Eckole

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

Eckole

Neuer Benutzer
Beiträge
2
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.
 
Oben