Ergebnisse verbinden

Ricola

Neuer Benutzer
Beiträge
2
Hallo,

vorweg...ich habe nur sehr begrenztes Verständnis für SQL...Sorry. Ich hoffe ihr könnt mir trotzdem helfen.

Ich arbeite mit einem objektorientierte Frontend auf einer Datenbank. Hinter jedem Objekt steckt ein SQL-code. Ich selber komme da nicht ran. Nun das Problem....

Die Datenbank hat viele 1:n Beziehungen. Beispiel: Zu einer Organisationeinheit gehören 5 Gebäude. Würde man diese standardmässig abfragen, erhalte ich 5 Datensätze. Jetzt war es mein Wunsch, dass diese Gebäude durch kommagetrennt in einem Feld angezeigt werden. Als Ergebnis habe ich nun nur noch eine Zeile mit der Organisationseinheit und dem Feld mit der Gebäudeauflistung.

Eine weitere Abfrage listet alle Dokumente die zu der Organisationseinheit gehören. Die Dokumente unterscheiden sich in Typ a und Typ b. Hier das gleiche...die Dokumente sollen wieder je in einem Feld, durch kommagetrennt, aufgelistet werden. Am Ende habe ich eine Zeile mit der Spalte Organisationseinheit, dem Feld mit Liste Dokument Typ a und ein Feld mit der Liste Dokument Typ b. Das klappt auch wunderbar.

Der letzte Wunsch klappt nicht. Ich möchte nun die Ergebnisse verbinden...also eine Zeile mit der Spalte Organisation, der Spalte Gebäude, der Spalte Dokument Typ a und eine Spalte mit dem Dokument Typ b. Als Ergebnis bekommen wir zig Verdoppelungen in den durch kommagetrennten Feldern.

Lt. Programmierer geht das nicht und ich mag das ehrlich gesagt nicht glauben. Ich kenne Union Abfragen, aber die brauchen die gleichen Spalten.

Gibt es nicht so eine Art Beziehungsabragen? ...wo nur der Schlüssel - in dem Fall die Organisation - die Daten verbindet?...also alles in einem Rutsch verarbeitet wird?


Ich hoffe ich konnte mich verständlich ausdrücken. Am Ende möchte ich unserem Programmierer nur einen Tipp geben, in welcher Richtung er mal testen sollte.

Danke vorab

Rico
 
Werbung:
Die Datenbank hat viele 1:n Beziehungen. Beispiel: Zu einer Organisationeinheit gehören 5 Gebäude. Würde man diese standardmässig abfragen, erhalte ich 5 Datensätze. Jetzt war es mein Wunsch, dass diese Gebäude durch kommagetrennt in einem Feld angezeigt werden. Als Ergebnis habe ich nun nur noch eine Zeile mit der Organisationseinheit und dem Feld mit der Gebäudeauflistung.
Simpel, einfach aggregieren. In PostgreSQL z.B. so:

Code:
test=*# select * from ricola ;
 organisationseinheit |  gebaeude   
----------------------+-------------
  1 | Wasserhaus
  1 | ToiToi
  1 | Schuppen
  2 | olle Bude
  2 | Prunkpalast
(5 Zeilen)

test=*# select organisationseinheit, string_agg(gebaeude,', ') from ricola group by organisationseinheit;
 organisationseinheit |  string_agg   
----------------------+------------------------------
  1 | Wasserhaus, ToiToi, Schuppen
  2 | olle Bude, Prunkpalast
(2 Zeilen)

test=*#
 
Wird in MSSQL mit FOR XML PATH gemacht, geht natürlich. Da würde ich auch nicht mit einem anderen Code als TSQL ran gehen aber für ein Beispiel bräuchte man schon Beispieldatensätze.
 
Werbung:
Zurück
Oben