Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Zusammenfassen von Datensätzen bei m:n Beziehungen

Begonnen von alwin, März 28, 2019, 19:14:30

⏪ vorheriges - nächstes ⏩

alwin

Hi Leute :)

ich habe 2 Tabellen ("tbl_Personal" und "tbl_Rollen"), die ich in einer 3. Tabelle ("tbl_Rollenzuordnung") zusammenführe (m:n-Beziehung).

Die Felder sind:
Tabelle 1: "Mitarbeiter-ID" und "Mitarbeitername"
Tabelle 2: "Rollen-ID", "Bereich", "Rollenname" "Purpose", "Aufgaben" und "Hoheitsgebiet"
Tabelle 3: "Mitarbeiter-ID" und "Rollen-ID"

Ich versuche mich gerade seit Stunden erfolglos an zwei Abfragen und es frustriert mich, dass ich es nicht hinkriege (obwohl ich ähnliche Abfragen schon in anderen Foren gefunden habe).

Die 1. Abfrage:
Die Felder "Bereich", "Rollenname" und "Mitarbeitername" sollen nebeneinander erscheinen (kann ich die Felder für die Abfrage umbenennen?). Dabei soll jeder "Rollenname" nur einmal auftauchen. Bei mehrfach besetzten Rollen sollen im Feld "Mitarbeitername" alle entsprechenden Namen mit "; " getrennt hintereinander geschrieben sein.

Die 2. Abfrage:
Alle Mitarbeiter sollen als Felder nebeneinander aufgelistet werden. Die Felder sollen jeweils nach den Datensätzen von "Mitarbeitername" benannt sein. In jedem Feld sollen die der Person zugeordneten Rollen untereinander aufgelistet werden.


Und noch einmal die Frage separat:
Wie kann ich bei Abfragen die Felder umbenennen, sodass das Feld aus der ursprünglichen Tabelle nicht genauso heißt wie das entsprechende Feld in der Abfrage?

Ich hoffe ich habe mich verständlich ausgedrückt. Bitte gern Rückfragen, falls nicht :)

Danke und liebe Grüße
Alwin

DF6GL

Hallo,

Du verlässt mit dieser Anforderung den normalisierten Zustand der DB und ist somit zu hinterfragen.  Wenn es sich nicht nur um "schöne" Darstellung (ohne Editier-Fähigkeit) handelt (z. B. mit einem Bericht), solltest Du dieses Vorhaben begraben.

1)
ZitatDie Felder "Bereich", "Rollenname" und "Mitarbeitername" sollen nebeneinander erscheinen (kann ich die Felder für die Abfrage umbenennen?).

Füge im Abfrageentwurf alle 3 Tabellen hinzu. Ziehe die o.a. 3 Felder in den Spaltenbereich und führe die Abfrage aus.

ZitatDabei soll jeder "Rollenname" nur einmal auftauchen.

Gruppiere die Abfrage nach "Rollenname"


ZitatBei mehrfach besetzten Rollen sollen im Feld "Mitarbeitername" alle entsprechenden Namen mit "; " getrennt hintereinander geschrieben sein.

Suche
http://dbwiki.net/wiki/VBA_Tipp:_Zeilen_einer_Spalte_einer_Tabelle_in_kommaseparierte_Liste_umwandeln
und baue die Funktion in ein Standardmodul ein.  In einer leeren Entwurfs-Spalte rufst Du die Funktion mit passenden Parametern auf.


Wie gesagt, dies taugt nur für Darstellungszwecke..

2)
erstelle eine Kreuztabellenabfrage (mit dem Assistenten) und passe sie anschließend an die Vorgaben an.

Beaker s.a.

Hallo Alwin,
ZitatWie kann ich bei Abfragen die Felder umbenennen
Indem du ihnen einen Alias verpasst
SELECT Tabellenfeldname As DeinName ...
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

alwin

Danke für eure Antworten! :)

Die Benennung per Alias habe ich hinbekommen.

Die Abfrage über die Kreuztabelle auch. Allerdings ist da noch das Problem, dass jede Zeile eine bestimmte Rollen-ID wiederspiegelt. Dadurch entstehen viele Lücken. Ich will aber, dass alle Rollen lückenlos untereinander stehen. Sonst muss man ja ewig scrollen, um alle Rollen einer entsprechenden Person zu sehen.

Zur 1. Abfrage:
Ich habe folgenden Code gefunden.

Public Function ADOConcatColumn(ByVal strSQL As String, _
                                Optional ByVal strSeparator As String = ", ") As String

   'Quelle: www.dbwiki.net oder www.dbwiki.de

   Dim rs As ADODB.Recordset

   Set rs = New ADODB.Recordset
   rs.Open strSQL, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
   If Not (rs.EOF And rs.BOF) Then
      ADOConcatColumn = rs.GetString(, , , strSeparator)
   End If

   rs.Close

End Function


Ich weiß allerdings nicht, wie ich den in einer Spalte der Abfrage aufrufen kann. Geschweige denn mit den richtigen Parametern..  :-\
Wie gesagt sollen alle Rollen nur je einmal untereinander auftauchen, jeweils mit den entsprechenden Mitarbeitern in der Spalte daneben (mit , separiert). Die Funktion verstehe ich bisher überhaupt nicht..

Danke schon mal für die Hilfe!
Alwin