[access2010] - nach Datum gruppieren und dabei Kilometerstrecke berechnen

bildungslücke

Grünschnabel
[access2010] - Tabellenerstellungsanfrage, nach Date group und Kilomter berechnen

ups - hätte besser im Titel noch Tabellenerstellungsanfrage schreiben sollen!

Hallo an alle!

ich benötige die Ausgabe von Daten, an welchem Datum ich wo war und daraus resultierend die gefahrenen Kilometer.

Dafür habe ich eine Tabelle1 mit den Spalten Ort und Datum und eine zweite Tabelle2 mit den Differenzkilometern (beginn, ziel, KM). Jetzt will ich diese so verbinden, dass ich nach Datum aufsteigend für jeden Kalendertag aus Tabelle1 eine Gesammtkilometerzahl habe.

Es geht um 4 Orte und immer den gleichen Start/Endpunkt. Die Route kann allerdings: Start-> Ort1 -> End sein, oder Start-> Ort 2 und Ort4 -> End oder alle Orte oder wie auch immer.

Dafür ist in Tabelle2 jede Differenz eingetragen:
Start - Ort1 8(km)
Start - Ort2 10
...
Ort1 - Ort2
Ort1 - Ort3
..
Ort1 - End 8(km)
Ort2 - End 10

Hoffe ich konnte es plausibel machen.

Die neue Tabelle soll dann das Feld1 mit Datum, ein Feld2 als Textfeld mit Start - Ortx - End und
Feld3 mit der Kilometeranzahl haben.

Und alles was ich hin bekomme, ist ein group aufs Datum, allerdings habe ich mit seit ca. 8 Jahren auch nicht mehr mit SQL beschäftigt.

Freue mich über jede Hilfe und vielen Dank
 
Zuletzt bearbeitet:
Also, MS Access mag sich zwar DB nennen, aber spätestens wenn man etwas komplexere Queries aufbauen will ist da fertig.
Ich habe keinen lösungsansatz für diese Problem mittels Query. Aber ich habe einen mittels VBA und Queries

folgendes Beispiel

Tabelle [route]
datum
ort

Tabelle [distanz]
start
ziel
distanz

Tabelle [result]
datum
start
ziel
distanz

nun habe ich eine kleine VBA-Routine geschrieben, die aus [route] die start und ziele sowei das datum der Tabelle [result] abfüllt
Visual Basic:
Public Sub fillResults()
    Dim rs      As DAO.Recordset
    Dim sql     As String
    Dim datum   As Date
    Dim start   As String
    Dim ziel    As String
On Error GoTo Err_Handler

    'tabelle leeren
    sql = "DELETE FROM result"
    Call CurrentDb.Execute(sql)

    'Tabelle route nach datum sortiert öffnen
    sql = "SELECT * FROM route ORDER BY datum"
    Set rs = CurrentDb.OpenRecordset(sql)
    
    rs.MoveFirst
    Do While Not rs.EOF And Not rs.BOF
        'Der Start braucht noch keinen Eintrag
        If Not start = vbNullString Then
            ziel = rs!ort
            'mit den Werten des vorherigen Laufes und dem neuen Ort als Ziel ein Eintrag erstellen
            sql = "INSERT INTO result (datum, start, ziel) VALUES (""" & datum & """, """ & start & """, """ & ziel & """)"
            Call CurrentDb.Execute(sql)
        End If
        
        'für die nöchste Strecke vorbereiten
        datum = rs!datum
        start = rs!ort
        rs.MoveNext
    Loop
    
Exit_Handler:
On Error Resume Next
    rs.Close
    Set rs = Nothing
    Exit Sub

Err_Handler:
    MsgBox Err.Description
    GoSub Exit_Handler
    Resume
End Sub

Um die Distanzen zu berechnen reicht auf dieser Grundlage nun ein einfaches SQL.
Die distanz ist extra 2 mal angehängt. Die verknüpfungen sind bei der zweiten über kreuz.
Das ist damit mit start=D und Ziel=B auch der distanzz-Eintrag start=B und Zeil=D gefunden wird
SQL:
UPDATE 
	(result 
	LEFT JOIN distanz AS d1 
		ON (result.ziel = d1.ziel) 
		AND (result.start = d1.start)) 
	LEFT JOIN distanz AS d2 
		ON (result.ziel = d2.start) 
		AND (result.start = d2.ziel) 
SET 
	result.distanz = IIf(Not IsNull([d1].[distanz]),[d1].[distanz],[d2].[distanz]);

Dieses SQL kann man gemütlich als query speicher und am Ende des VBA-Codes noch aufrufen
Visual Basic:
Call DoCmd.RunSql("myQuery")
 
Zuletzt bearbeitet von einem Moderator:
Zurück