Hallo,
ich habe eine Tabelle die so aufgebaut ist:
LFN_Person|LFN_Vater|LFN_Mutter
101 361 103
102 105 106
377 361 376
412 410 411
413 410 411
416 410 411
...
Daraus lässt sich ableiten, wer der Vater und die Mutter jeder Person ist-
und über Umwege halt auch wer z.B. die Geschwister sind.
jetzt Möchte ich aus obiger Tabelle eine Abfrage erstellen, um die Geschwister einer Person herauszufinden- erst mal Väterlicherseits
die Abfragetabelle könnte dann so aussehen:
LFN_Vater | LFN_Person1 | LFN_Person2 |LFN_Person3 ...
361 101 377
105 102
410 412 413 416
...
Wie könnte ich das bewerkstelligen?
Schon mal im Vorraus vielen Dank für eure Hilfe.
Mfg Burny
Hallo Burny,
so etwas geht im Ansatz mit einer Kreuztabelle:
TRANSFORM Count(DeineTabelle.LFN_Person) AS Anzahl
SELECT LFN_Vater AS Vater
FROM DeineTabelle
GROUP BY LFN_Vater
PIVOT LFN_Person
Gruß Oma
Access sagt mir"Zu viele Kreuztabellenüberschriften (400) " wie könnte man das Problem noch lösen?Schon mal vielen Dank für die Antwort.
Mfg Burny
Hallo Burny,
für viele Väter bzw. Geschwister gehts dann wohl nicht mit einer Kreuztabelle.
Ein anderer Vorschlag: du kannst die Geschwister zu einem Vater in einem Feld darstellen.
Nicht ganz das, was du möchtest aber vielleicht eine brauchbare Lösung.
Hierzu eine Funktion in deiner DB:
Public Function Geschwister(Vater As String) As String
Dim strSQL As String
Dim rs As DAO.Recordset
strSQL = "SELECT LFN_Person FROM tblVater WHERE LFN_Vater =" & Vater
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)
Do While rs.EOF = False
Geschwister = Geschwister & "; " & rs!LFN_Person
rs.MoveNext
Loop
Geschwister = Mid(Geschwister, 4, 100)
rs.Close
Set rs = Nothing
End Function
Dann eine Abfrage mit der Funktion:
SELECT tblVater.LFN_Vater, Geschwister([LFN_Vater]) AS Ergebnis, Count(tblVater.LFN_Vater) AS Anzahl
FROM tblVater
GROUP BY tblVater.LFN_Vater;
Hoffe, dass das Ergebnis deine Zustimmung findet.
Gruß Oma
Hallo,
habe die Sache noch einmal erweitert, damit du die Geschwister jeweils in einem Feld bekommst:
1. Funktion : alle Geschwister in einem Feld
Public Function Geschwister(Vater As String) As String
Dim strSQL As String
Dim rs As DAO.Recordset
strSQL = "SELECT LFN_Person FROM tblVater WHERE LFN_Vater =" & Vater
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)
Do While rs.EOF = False
Geschwister = Geschwister & "; " & rs!LFN_Person
rs.MoveNext
Loop
Geschwister = Mid(Geschwister, 4, 100)
rs.Close
Set rs = Nothing
End Function
2. Funktion: Teile eines Feldes in eigene Felder
Public Function Part(pString As String, pDelimiter As String, pPart As Integer) As String
Dim pArray As Variant
pArray = Split(pString, pDelimiter)
If Not IsNumeric(pPart) Then Exit Function
If pPart - 1 <= UBound(pArray) Then Part = pArray(pPart - 1)
End Function
3. Abfrage mit beiden Funktionen u. 6. mögliche Geschwister, (Anzahl kann natürlich erhöht werden)
SELECT LFN_Vater, Geschwister([LFN_Vater]) AS Ergebnis,
Count(tblVater.LFN_Vater) AS Anzahl,
Part([Ergebnis],"; ",1) AS Geschwister1,
Part([Ergebnis],"; ",2) AS Geschwister2,
Part([Ergebnis],"; ",3) AS Geschwister3,
Part([Ergebnis],"; ",4) AS Geschwister4,
Part([Ergebnis],"; ",5) AS Geschwister5
FROM tblVater
GROUP BY tblVater.LFN_Vater;
Gruß Oma
Hi Oma,
vielen Dank für die Hilfe, dass ist eine sehr geniale Lösung.
So in der Art hab ich mir das vorgestellt/ damit kann ich weiterarbeiten.
Kriegt man das auch irgendwie nur mit SQL hin ?
Mfg Burny
Hallo Burny,
was stören dich denn die beiden kleinen Funktionen??
Gruß Oma