Hallo,
ich habe 2 Tabellen mit folgenden Feldern:
FAHRZEUGE: FahrzeugNr, Bezeichnung, ...
ABGABEDATEN: FahrzeugNr, AbgabemengeLiter, Kilometerstand, DatumUhrzeitUhrzeit, ...
Ich versuche jetzt für eine
frei wählbare Anzahl von Fahrzeugen, für einen
frei wählbaren Zeitraum den Durchschnittsverbrauch nach folgender Formel zu berechnen sowie noch andere Daten anzuzeigen:
Strecke = Max(Kilometerstand) - Min(Kilometerstand)
Liter = Summe(AbgabemengeLiter) - First(AbgabemengeLiter)
Verbrauch = (100/Strecke) * Liter
Code:
SELECT ABGABEDATEN.FahrzeugNr, FAHRZEUGE.Bezeichnung,
Count(ABGABEDATEN.FahrzeugNr) AS ANZAHL,
Sum(ABGABEDATEN.AbgabemengeLiter) AS GESAMTMENGE,
Max(ABGABEDATEN.Kilometerstand) AS MAXKilometerstand,
Min(ABGABEDATEN.Kilometerstand) AS MINKilometerstand,
Max(ABGABEDATEN.Kilometerstand) - Min(ABGABEDATEN.Kilometerstand) AS STRECKE,
((100 / (Max(ABGABEDATEN.Kilometerstand) - Min(ABGABEDATEN.Kilometerstand))) * (Sum(ABGABEDATEN.AbgabemengeLiter) -
(SELECT FIRST 1
T.AbgabemengeLiter AS ERSTE
FROM
ABGABEDATEN AS T
WHERE
T.FahrzeugNr = ABGABEDATEN.FahrzeugNr AND
T.DatumUhrzeit >= '01.05.2012' AND
T.DatumUhrzeit <= '31.12.2012'
ORDER BY
T.DatumUhrzeit))) AS VERBRAUCH
FROM
ABGABEDATEN
INNER JOIN FAHRZEUGE ON ABGABEDATEN.FahrzeugNr = FAHRZEUGE.FahrzeugNr
WHERE
(ABGABEDATEN.FahrzeugNr = 115) OR
(ABGABEDATEN.FahrzeugNr = 120) OR
(ABGABEDATEN.FahrzeugNr = 121 AND
ABGABEDATEN.DatumUhrzeit >= '01.05.2012' AND
ABGABEDATEN.DatumUhrzeit <= '31.12.2012')
GROUP BY
ABGABEDATEN.FahrzeugNr,
FAHRZEUGE.Bezeichnung
Im Test funktioniert das ganze... wenn allerdings für ein Fahrzeug in dem Zeitraum keine Abgabe vorhanden ist, so erhalte ich die Fehlermeldung "divide by zero" was ja auch richtig ist.
Frage: Wie kann ich das ganze besser umsetzen?
Ich habe vor die Daten im Fastreport anzuzeigen.
Zudem möchte ich auch wählbar machen ob die Abgabedaten zusätzlich angezeigt werden sollen.
Nimmt man dafür temporäre Tabellen? Mehrere Queries?
Grüße
user0815