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
Code: Alles auswählen
|ZuordnungTyp1 |ZuordnungTyp2 |
------------+--------------+--------------+
ModellTypA |Heinz, |Knut |
|Otto, | |
|Mark | |
------------+--------------+--------------+
ModellTypB |Helga | |
------------+--------------+--------------+
ModellTypC | |Tim, |
| |Ina |
------------+--------------+--------------+
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;
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
Wie erzeuge ich am besten den oben geforderten Bericht in OOo Base?
Vielen Dank im Voraus!
Gruß
nimmermann