Mehrere Werte per Select in ein Zielfeld bringen?

Hallo! Wie kann man erreichen, dass man mehrere Werte aus einer Tabelle in ein Zielfeld bringt (Komma-getrennt)

Beispiel: Es gibt einen Buchungsbeleg, welcher in einer weiteren Tabelle mehrere Kostenträger zugeordnet hat. Diese Kostenträger sollen nun in ein Zielfeld (Sicht)

Tabelle1:

Beleg|Text|Datum|Betrag
0123|Buchungsbeleg 0123|20080616|324,26

Tabelle2:

Beleg|KTR|KBetrag
0123|1001|100,00
0123|1002|224,26

Sicht:

Beleg|Text|Datum|Betrag|KTR
0123|Buchungsbeleg 0123|20080616|324,26|1001,1002

Ich bin leider nicht gut in Sachen SQL. Es geht bestimmt irgendwie über eine Schleife oder so…

Vielen Dank für Euere Hinweise!

Grüße
blechdesigner

hallo

wichtigste frage: welches datenbanksystem?

unter oracle lässt sich sowas recht leicht über eine stored-function (pl/sql) lösen. andere datenbanksysteme werden vermutlich was ähnliches bieten, die kenne ich aber nicht so gut.

mit „normalen“ mitteln wird es nicht wirklich gehen - es sei denn, du kannst die maximale anzahl an einträgen in der untertabelle begrenzen. dann könnte man sich mit einer reihe von outer-joins helfen. ist aber nur für einen proof-of-concept sinnvoll und nicht für den echteinsatz…

allerdings muss du beachten, dass auch die lösung mit der function nicht ganz „sauber“ ist. die view, die du dir da zusammenbastelst, kann bei grossen datenmengen schon recht langsam werden - üblicherweise sind die datenbanksysteme nicht für solche operationen optimiert.

lg
erwin

Hallo Erwin,

das DB-System ist ein MS SQL Server 2000. Die Untereinträge kann ich nicht direkt begrenzen, da ich nicht im Vorfeld sagen kann, wie viele Kostensplits auf einen Beleg auflaufen. Erfahrungsgemäß sind es jedoch nicht so viele. (In der Regel 1-5).

kann man eventuell eine Funktion deklarieren oder eine vorgeschaltete Sicht oder irgendetwas anderes?

Grüße
blechdesigner

hi

mit ms sql server kenne ich mich nicht so gut aus…

ich nehme an, „sichten“ ist die übersetzung von „views“ und meint genau das selbe. wie auch immer, mit views wirst du nicht weiter kommen - die sind für solche dinge nicht geeignet. zumindest nicht auf praktikable weise.

eine funktion hingegen kann z.b. den fremdschlüssel als parameter entgegennehmen und einen string zurückliefern. intern macht es einfach einen cursor über deine abhänige tabelle, holt sich alle notwendigen werte und hängt die zu einem einzelnen string zusammen.

in oracle - pl/sql würde das so aussehen:

declare function getvalues(id in number) returns varchar2
is
ls_values varchar2(200);
begin
for cur in (select value from subtable where foreignkey = id)
loop
ls_values := ls_values || cur.value || ‚,‘ ;
end loop ;
return substr(ls_values,1,length(ls_values)-1);
end ;

der dazugehörige aufruf:

select a.id, a.name, getvalues(a.id)
from table ;

ähnliches gibt es sicher auch im sql server, nur ist die syntax für die function sicher etwa anders. die hilfe sollte da aber weiterhelfen.

lg
erwin

Hallo Erwin, vielen Dank für Deine Hinweise! ich werde mich mal mit diesem neuen Wissen in die Spur begeben. So ich mich hier nicht mehr meld hat es mir geholfen.

Grüße blechdesigner!