Neuigkeiten:

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

Mobiles Hauptmenü

DomSumme per Monat über ein Jahr hinweg

Begonnen von MarkusF, Februar 28, 2021, 15:35:37

⏪ vorheriges - nächstes ⏩

MarkusF

Hallo Zusammen

Bisher konnte ich zu all meinen Herausforderungen Lösungen vor allem in diesem Forum ergoogeln. Aber jetzt bin ich mit mein Latein am Ende und ich hoffe ihr könnt mich erleuchten...

Ich habe in meiner Datenbank eine Abfrage (qryAnzahlUbernommeneFz), die mir Die Anzahl von übernommenen Fahrzeugen (AnzahlvonFzStaTechnischerPlatz)) und das ÜbernahmeDatum (FzStaUbernahmeDatum) anzeigt.

Auf dieser Abfrage möchte ich nun eine Abfrage aufsetzen, die mir dann die übernommenen Fahrzeuge pro Monat kumuliert. Also bin ich gemäss Microsoftbeispiel wie folgt vorgegangen:

1. Feld 1 folgendes ausgefüllt:  AYear: DatTeil("jjjj";[FzStaUbernahmeDatum])
2. Feld 2 folgendes ausgefüllt:  AMonth: DatTeil("m";[FzStaUbernahmeDatum])

3. Im Feld 3 folgendes eingegeben und da endet die Reise, da der Ausdruck irgendwie syntaktisch falsch ist.

AnzahlFz: DomSumme("AnzahlvonFzStaTechnischerPlatz";"[qryAnzahlUbernommeneFz]"; "DatTeil("m";[FzStaUbernahmeDatum])<=" & [AMonth] & " And DatTeil("jjjj";[FzStaUbernahmeDatum]<=" & [AYear] & "")

Wo liegt der Fehler? Ich hoffe ihr könnt mir helfen...

Vielen Dank für eure Unterstützung

Gruss
Markus


MzKlMu

#1
Hallo,
besser wäre es für die Where Klausel ein Datum (von- / bis) zu verwenden, das Datum schließt ja Jahr und Monat ein.
Dann hast Du nur eine Bedingung für Where ...

Dein Problem kannst Du dann mit einer gruppierten Abfrage (von qryAnzahlUbernommeneFz) lösen, Monat und Jahr gruppieren und für das Feld "AnzahlvonFzStaTechnischerPlatz" dann Summe einstellen.

Was verstehst Du unter "über ein Jahr hinweg" ?
Vom 1.1. bis 31.12. oder andere Zeiträume?
Gruß Klaus

MarkusF

Hi MzKlMu

Mit über ein Jahr hinweg mein ich konkret, dass das erste Fahrzeug im Mai 2020 und das letzte Fahrzeug irgendwann im Jahr 2022 geliefert wird.


Zitat von: MzKlMu am Februar 28, 2021, 17:25:34Dein Problem kannst Du dann mit einer gruppierten Abfrage (von qryAnzahlUbernommeneFz) lösen, Monat und Jahr gruppieren und für das Feld "AnzahlvonFzStaTechnischerPlatz" dann Summe einstellen.

Das habe ich probiert, dann bekomme ich nur die Summe der Fahrzeuge, die in dem jeweiligen Monat übernommen wurden. Aber ich kriege es nicht hin, das in dem aktuellen Monat die übernommenen Fahrzeuge vom Vormonat mit hinzuaddiert werden.

MzKlMu

Hallo,
eine Summierung in einer gruppierten Abfrage schließt alle Monate und Jahre des Zeitraums ein.

AMonth uns AYear sind das Formularfelder ?

Zeige mal die Abfrage (SQL)die Du probiert hast.
Gruß Klaus

ebs17

ZitatWo liegt der Fehler?
Soweit ich das verstehe, muss man Jahr und Monat gemeinsam betrachten und nicht jeweils einzeln.

Also einen Ausdruck verwenden wie ...
Year(Datumsfeld) * 100 + Month(Datumsfeld)Das ergibt eine Zahl in der Form 202102. Da ist dann auch der folgende Monat im Wert höher als der aktuelle Monat, und man kann schön kumulieren, auch über Jahresgrenzen hinaus.
Mit freundlichem Glück Auf!

Eberhard

MarkusF

Hallo Klaus

Zitat von: MzKlMu am Februar 28, 2021, 19:34:23eine Summierung in einer gruppierten Abfrage schließt alle Monate und Jahre des Zeitraums ein.

AMonth uns AYear sind das Formularfelder ?

AMonth und AYear sind bzw. waren Felder in der Frage, damit habe ich das Jahr und den Monat aus dem Feld [FzStaUbernahmeDatum] der Abfrage [qryAnzahlUbernommeneFz] extrahiert.

Nun habe ich in der Abfrage [qryAnzahlUbernommeneFz] ein Feld [MonatJahr] eingefügt, das mir aus dem Feld [FzStaUbernahmeDatum] nun das Jahr und den Monat anzeigt, also im Sinne von 202005.

Der SQL Code der neuen Abfrage sieht nun so aus:
SELECT qryAnzahlUbernommeneFz.MonatJahr, DSum("[AnzahlvonFzStaTechnischerPlatz]","qryAnzahlUbernommeneFz") AS AnzahlFz
FROM qryAnzahlUbernommeneFz
GROUP BY qryAnzahlUbernommeneFz.MonatJahr
ORDER BY qryAnzahlUbernommeneFz.MonatJahr, DSum("[AnzahlvonFzStaTechnischerPlatz]","qryAnzahlUbernommeneFz");

Das Ergebnis ist wie folgt:
MonatJahr   AnzahlFz
202005       20         
202006       20
202007       20
usw...

Die Gesamtzahl Anfang 2021 beträgt 20 Fahrzeuge, aber 202005 müsste 6 Fz stehen.




MarkusF

Hallo Eberhard

Zitat von: ebs17 am Februar 28, 2021, 20:16:00Also einen Ausdruck verwenden wie ...
Code [Auswählen] Erweitern
Year(Datumsfeld) * 100 + Month(Datumsfeld)Das ergibt eine Zahl in der Form 202102. Da ist dann auch der folgende Monat im Wert höher als der aktuelle Monat, und man kann schön kumulieren, auch über Jahresgrenzen hinaus.

Müsste der Ausdruck dann so aussehen?

AnzahlFz: DomSumme("[AnzahlvonFzStaTechnischerPlatz]";"[qryAnzahlUbernommeneFz]"; (Year(FzStaUbernahmeDatum) * 100 + Month(FzStaUbernahmeDatum))

Da bekomme ich die Meldung "Der angegebene Ausdruck ... ist nicht als Bestandteil einer Aggregatfunktion enthalten

MzKlMu

#7
Hallo,
so:
SELECT Year([FzStaUbernahmeDatum])*100+Month([FzStaUbernahmeDatum]) AS JahrMonat,
Sum(AnzahlvonFzStaTechnischerPlatz) AS SummevonAnzahlvonFzStaTechnischerPlatz
FROM qryAnzahlUbernommeneFz
GROUP BY Year([FzStaUbernahmeDatum])*100+Month([FzStaUbernahmeDatum])
ORDER BY Sum(AnzahlvonFzStaTechnischerPlatz)


Du kannst auch die Monate im Klartext anzeigen lassen.
SELECT Sum(AnzahlvonFzStaTechnischerPlatz) AS SummevonAnzahlvonFzStaTechnischerPlatz,
MonthName(Month([FzStaUbernahmeDatum])) & " " & Year([FzStaUbernahmeDatum]) AS JahrMonatText
FROM qryAnzahlUbernommeneFz
GROUP BY Year([FzStaUbernahmeDatum])*100+Month([FzStaUbernahmeDatum]), MonthName(Month([FzStaUbernahmeDatum])) & " " & Year([FzStaUbernahmeDatum])
ORDER BY Sum(AnzahlvonFzStaTechnischerPlatz)
Die Gruppierung über JahrMonat muss aber wegen der Sortierung auch erhalten bleiben. Wird nur nicht angezeigt.
Direkt aus der Abfrage "qryAnzahlUbernommeneFz".
Zitat von: undefinedNun habe ich in der Abfrage [qryAnzahlUbernommeneFz] ein Feld [MonatJahr] eingefügt,
Das braucht es nicht.
Gruß Klaus

ebs17

ZitatIch habe in meiner Datenbank eine Abfrage (qryAnzahlUbernommeneFz), die mir Die Anzahl von übernommenen Fahrzeugen (AnzahlvonFzStaTechnischerPlatz)) und das ÜbernahmeDatum (FzStaUbernahmeDatum) anzeigt.
... die übernommenen Fahrzeuge pro Monat kumuliert
Etwa so:
SELECT
   Year(Q.FzStaUbernahmeDatum) * 100 + Month(Q.FzStaUbernahmeDatum) AS JahrMonat,
   DSum("AnzahlvonFzStaTechnischerPlatz", "qryAnzahlUbernommeneFz", "Year(FzStaUbernahmeDatum) * 100 + Month(FzStaUbernahmeDatum) <= " & Year(Q.FzStaUbernahmeDatum) * 100 + Month(Q.FzStaUbernahmeDatum)) AS KumAnzahl
FROM
   qryAnzahlUbernommeneFz AS Q
Die Abfrage ist systematisch wegen der korrelierenden Unterabfrage aufwändig und performancegefährdet. Da würde man sich vorher sicher anschauen, wie optimal die Basisabfrage ist.
Mit freundlichem Glück Auf!

Eberhard

MarkusF

Guten Morgen Klaus
Deine beiden Lösungen funktionieren und Fahrzeuge werden kumuliert. Allerdings hätte ich sagen müssen, dass das Datum aufsteigend sortiert werden muss. Wenn ich die Sortierung ändere, stimmt die aufsteigende Summe der Fahrzeuge nicht mehr. Aber ich habe auch noch nicht intensiv versucht, die Sortierung erfolgreich zu ändern.

Guten Morgen Eberhard
Tip Top, Dein Code liefert genau das Ergebnis, welches ich seit 1.5 Wochen hinterherjage ...

Vielen Dank für eure intergalaktische Unterstützung. Ich sehe es nicht als selbstverständlich an, so zeitnah und das auch noch an einem Sonntag eine Antwort zu bekommen. Auf die Lösung wäre ich selber nie gekommen und werde mir beide nochmal genauer anschauen um daraus zu lernen!
Viele Grüsse und ein guten Start in die Woche wünscht ein nun sehr glücklicher
Markus