# SQL - Felder nebeneinander ausgeben



## nyc2005 (13. Juli 2005)

Hallo!

Ich habe folgendes Problem, dass ich eine Liste erstellen soll für Teilnehmer von Veranstaltungen. Dort gibt es manchmal auch mehrere Referenten (refvname || ' ' || refname). Diese werden mir allerdings untereinander angezeigt, was wiederrum die ganze Liste durcheinanderbringt.

Der SQL-Befehl, den ich bis jetzt habe:

select distinct refvname || ' ' || refname
from wb_detail, wb

*Jetzt meine Frage:* Wie bekomme ich (falls es mehrere Referenten gibt) diese *nebeneinander* in eine Zeile?


Ich würde mich sehr freuen, wenn mir jemand helfen könnte.


----------



## andi_g69 (13. Juli 2005)

Und mit welchem DBMS?

Davon abgesehen: Was steht in den Tabellen WB und WB_Detail? Und wie sind die verknüpft? In Deiner Query bildest Du einfach nur das Kreuzprodukt beider Tabellen...


----------



## nyc2005 (13. Juli 2005)

select distinct refvname || ' ' || refname
from wb_detail, wb
where wb.wb_refnr = wb_detail.wb_refnr
and 
wb_nr = [WB_NR]

das ist die ganze syntax.

mit oracel.

wb_detail, wb sind tabellen aus einem tabellensystem, auf das das programm zugreift.


----------



## andi_g69 (13. Juli 2005)

Aha, das erklärt zwar die Struktur ein bischen besser, aber leider habe ich für Oracle keine Lösung des Problems.


----------



## nyc2005 (13. Juli 2005)

Schade, aber trotzdem danke für deine Hilfe!


----------



## Exceptionfault (13. Juli 2005)

Du kannst dein Problem mit einer PL/SQL Prozedur lösen. Hier mal ein Beispiel für die benötigte Funktion:


```
> select * from test;

       VAL
----------
         1
         3
         6
         3
        12
         5

6 Zeilen ausgewählt.
```

Die obigen Werte will ich nun in einem einzigen Feld:


```
> declare
      arr         DBMS_UTILITY.uncl_array;
      valcount    BINARY_INTEGER;
      list        VARCHAR2(32000);
      i           NUMBER := 1;
    begin
  
      for item in ( SELECT val from excel.test ) LOOP
        arr( i ) := item.val;
        i := i+1;
       END LOOP;
       arr( i ):= NULL;
   
       dbms_utility.table_to_comma( arr, valcount, list );
   
       dbms_output.put_line( 'Number of values: ' || TO_CHAR( valcount ) );
       dbms_output.put_line( 'List            : ' || list );
   
     end;
     /
Number of values: 6
List            : 1,3,6,3,12,5

PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
```

In der Variable "list" ist nun eine Liste mit allen Werten in einem Feld, die Variable "valcount" enthält die Anzahl der Werte.


----------



## nyc2005 (14. Juli 2005)

danke, für deine hilfe.
allerdings: eins verstehe ich immer noch nicht: 
wie baue ich meine variablen refname und refvname darin ein?
und muss ich statt excel.test meine eigene datei angeben?


----------

