Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Burny am Februar 07, 2011, 22:29:48

Titel: Tabelle umsortieren
Beitrag von: Burny am Februar 07, 2011, 22:29:48
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




Titel: Re: Tabelle umsortieren
Beitrag von: oma am Februar 08, 2011, 21:15:55
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
Titel: Re: Tabelle umsortieren
Beitrag von: Burny am Februar 12, 2011, 12:02:58
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
Titel: Re: Tabelle umsortieren
Beitrag von: oma am Februar 12, 2011, 13:01:36
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
Titel: Re: Tabelle umsortieren
Beitrag von: oma am Februar 12, 2011, 14:49:43
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
Titel: Re: Tabelle umsortieren
Beitrag von: Burny am Februar 13, 2011, 16:14:51
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
Titel: Re: Tabelle umsortieren
Beitrag von: oma am Februar 13, 2011, 23:32:39
Hallo Burny,

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

Gruß Oma