(MSSQL 2005) Mehrere Zeilen als Array oder Liste zurückgeben
Hopsel
- datenbank
Hi alle!
Ich erkläre mein Problem am besten an einem Beispiel.
Tabelle User (id, name)
Tabelle Gruppe (id, name)
Tabelle User_Gruppe (id, user_id, gruppe_id)
Mit
SELECT U.name
FROM User U
bekomme ich alle User.
Mit
SELECT G.name
FROM Gruppe G
JOIN User_Gruppe UG
ON G.id=UG.gruppe_id AND
UG.user_id=BESTIMME_ID
bekomme ich alle Gruppen, denen ein bestimmter User angehört.
Mit
SELECT U.id,G.id
FROM User U
LEFT JOIN Gruppe G
INNER JOIN User_Gruppe UG
ON G.id=UG.gruppe_id
ON UG.user_id=U.id
bekomme ich für jeden User so viele Zeilen, wie er Gruppen angehört, mindestens jedoch eine Zeile (LEFT OUTER JOIN).
Für meinen Zweck brauche ich für jeden User genau eine Zeile.
Schön wäre es, wenn ich für jeden User sowas wie eine Liste oder ein Array hätte, indem alle Gruppen aufgelistet sind, denen der User angehört.
Hat jemand eine Idee, wie das realisiert werden kann?
MfG H☼psel
Hi,
Schön wäre es, wenn ich für jeden User sowas wie eine Liste oder ein Array hätte, indem alle Gruppen aufgelistet sind, denen der User angehört.
Hat jemand eine Idee, wie das realisiert werden kann?
Ja, du kannst ein User Defined Aggregate in .Net Code (CLR) schreiben, welches dir die Informationen als komma-separierten String aggregiert.
Ciao, Frank
Hi Frank,
danke für deine Antwort!
Schön wäre es, wenn ich für jeden User sowas wie eine Liste oder ein Array hätte, indem alle Gruppen aufgelistet sind, denen der User angehört.
Hat jemand eine Idee, wie das realisiert werden kann?
Ja, du kannst ein User Defined Aggregate in .Net Code (CLR) schreiben, welches dir die Informationen als komma-separierten String aggregiert.
Hmm, nicht das, was ich mir erhoffte, auch wenn ich darauf vorbereitet war. =)
Dann kann ich diesen Punkt (in meinem Fall) auch gleich in das Programm, das mit der Datenbank arbeitet, auslagern.
Ich habe gehofft, es gäbe einen trivialen und kurzen Weg über eine vordefinierte Aggregatfunktion oder etwas ähnliches...
MfG H☼psel
Mir ist da leider keine "GROUP_CONCAT()" ähnliche eingebaute Aggregatsfunktion bekannt.
Array können ja sowieso momentan noch nicht nativ in SQL 2005 abgebildet werden, von daher käme als serialisierte Repräsentation eh nur die Trennzeichen-separierte Darstellung in Frage.
Ciao, Frank