Rouven: Access: Abfrage ~ GROUP CONCAT

Hello,

ich kämpfe gerade mit einer relativ dynamischen Datenstruktur in MS-Access und suche nun so etwas wie das GROUP_CONCAT von MySQL. Ich vermute eine Kreuztabellen-Abfrage ist etwas das ich suche, aber bin mir nicht ganz sicher.

Ausgangslage:
id_datensatz  typ    wert
1             x      a
1             y      b
1             z      c
2             x      d
2             z      e
2             z      f

-> Also eine Liste, bei der zu einem Datensatz verschiedene typ+wert-Paare zugeordnet sind. Zu beachten dabei:

  • es sind nicht zu allem die selbe Anzahl bzw. alle verschiedenen Typen verfügbar
  • zu einem Datensatz kann der selbe Typ mit unterschiedlichen Werten mehrfach vorhanden sein

Was ich optimalerweise suche wäre eine Liste
1    x:a    y:b     z:c
2    x:d    z:e     z:f

Womit ich leben könnte wäre
satz x      y       z          z
1    a      b       c
2    d              e          f

Aus praktischen Gründen kann davon ausgegangen werden, dass die Anzahl der insgesamt zu einem Datensatz gegebenen Werte 25 nicht übersteigen wird.

Gibt es Vorschläge, wie diese Liste erzeugt werden kann?

Danke im Voraus!

MfG
Rouven

--
-------------------
Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
  1. yo Rouven,

    access ist nicht ganz meine welt, aber was spricht den dagegen, dir eine spezielle funktion zu schreiben, die als eingabeparameter die id einer bestimmten tabelle hat und dann alle datensätze der id selektiert und innerhalb einer schleife einen string in gewünschter form zusammen setzt und diesen string dann als <einen> wert zurück liefert ?

    ps: group_contact sollte es für jedes rdbms geben...

    Ilja

    1. Hello,

      access ist nicht ganz meine welt, aber was spricht den dagegen, dir eine spezielle funktion zu schreiben, die als eingabeparameter die id einer bestimmten tabelle hat und dann alle datensätze der id selektiert und innerhalb einer schleife einen string in gewünschter form zusammen setzt und diesen string dann als <einen> wert zurück liefert ?

      nichts! Nichts, bis auf die Kleinigkeit von Performance. Ich habe in der Tabelle demnächst ca. 20.000 Datensätze x <Anzahl Merkmale> drin, und diese 6-stellige Zahl ist eine Dimension, ab der Access langsam etwas schwindelig wird. Ich mache im Moment nichts anders als ein per dbOpenForward geöffnetes Recordset linear durchzulaufen und bei nicht veränderter ID den Eintrag in der Zieltabelle daneben zu setzen und andernfalls eine neue Zeile aufzumachen. Leider ist das Ergebnis eine Verzögerung von ca. 2 Sekunden. Ich bin am Tunen, hab es schon von 4 auf 2 runtergeschafft, aber ich glaube viel weiter runter geht es nicht mehr. Hatte gehofft, einen View aufbauen zu können, den sich Access selbst hält. Das Problem ist, ich kann nicht garantieren, dass Änderungen nur über die GUI erfolgen, d.h. selbst eine Tabelle verwalten ist schwierig - ein View wäre nicht mein Problem, sondern das von Access...

      MfG
      Rouven

      --
      -------------------
      "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"