Pivot-Abfrage mit selbstdefinierter Aggregatefunktion

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

nimmermann
Beiträge: 1
Registriert: Sa, 11.09.2010 19:46

Pivot-Abfrage mit selbstdefinierter Aggregatefunktion

Beitrag von nimmermann »

Hallo Forum,

gibt es eine Möglichkeit, bei einer Pivot-Abfrage die Aggregatefunktion selbst zu definieren, zum Beispiel in Form einer OOo-Basic-Funktion?

Konkret:
Es geht um eine Tabelle "T_Kinder", die in einer MS-Access-Datenbank hinterlegt ist.
Der Tabelleninhalt speichert für jedes Kind sowohl eine Gruppenzugehörigkeit als auch eine Zugehörigkeit zu einem Zeitmodell.
Ziel ist ein Bericht, der erkennbar macht, welche Kinder dieselbe Zuordnung als auch dasselbe Zeitmodell beanspruchen.

Der Inhalt der T_Kinder sieht beispielsweise so aus:

Code: Alles auswählen

Name   | Modell      | Zuordnung
-------+-------------+----------------------
Heinz  | ModellTypA  | ZuordnungTyp1
Helga  | ModellTypB  | ZuordnungTyp1
Knut   | ModellTypA  | ZuordnungTyp2
Tim    | ModellTypC  | ZuordnungTyp2
Otto   | ModellTypA  | ZuordnungTyp1
Mark   | ModellTypA  | ZuordnungTyp1
Ina    | ModellTypC  | ZuordnungTyp2
Ziel ist die Ausgabe folgender Tabelle:

Code: Alles auswählen

            |ZuordnungTyp1 |ZuordnungTyp2 |
------------+--------------+--------------+
ModellTypA  |Heinz,        |Knut          |
            |Otto,         |              |
            |Mark          |              |
------------+--------------+--------------+
ModellTypB  |Helga         |              |
------------+--------------+--------------+
ModellTypC  |              |Tim,          |
            |              |Ina           |
------------+--------------+--------------+ 
Unter MS-Access hatte ich das damals so gelöst, indem ich beim Erstellen der Pivot-Tabelle eine selbstgeschriebene Aggregatefunktion genutzt habe.

Der SQL sah damit so aus:

Code: Alles auswählen

TRANSFORM
stringzusammenfassung([T_Kinder].[Modell],[T_Kinder].[Zuordnung]) AS
Ausdr1
SELECT T_Kinder.Modell
FROM T_Kinder
GROUP BY T_Kinder.Modell
PIVOT T_Kinder.Zuordnung;
Die Aggregatefunktion selbst:

Code: Alles auswählen

Function stringzusammenfassung(modell As Variant, _
                               zuordnung As Variant)
Dim DB As Database, RS As Recordset, sSQL As String, s As String

If DB Is Nothing Then Set DB = CurrentDb

sSQL = "SELECT T_Kinder.Vorname,T_Kinder.Name " & _
       "FROM T_Kinder " & _
       "WHERE T_Kinder.Modell = '" & modell & "' " & _
       "AND   T_Kinder.Zuordnung = '" & zuordnung & "' " & _
       "ORDER BY T_Kinder.Name,T_Kinder.Vorname;"

Set RS = DB.OpenRecordset(sSQL)
' aus dem Ergebnis der Abfrage bauen wir den String zusammen:
Do While Not RS.EOF
   s = s & RS("Name") & ", " & RS("Vorname") & vbCrLf
   RS.MoveNext
Loop

If s <> "" Then
   s = Left$(s, Len(s) - 2) ' letztes vbcrlf rausfiltern
End If

stringzusammenfassung = s
End Function 
Leider kann ich die Datenbank in Zukunft nicht mehr mit MS-Access pflegen und möchte daher stattdessen OOo-Base nutzen.
Wie erzeuge ich am besten den oben geforderten Bericht in OOo Base?

Vielen Dank im Voraus!

Gruß
nimmermann