Neuigkeiten:

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

Mobiles Hauptmenü

Tabelle umsortieren

Begonnen von Burny, Februar 07, 2011, 22:29:48

⏪ vorheriges - nächstes ⏩

Burny

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





oma

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
nichts ist fertig!

Burny

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

oma

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
nichts ist fertig!

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
nichts ist fertig!

Burny

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

oma

Hallo Burny,

was stören dich denn die beiden kleinen Funktionen??

Gruß Oma
nichts ist fertig!