zappo74
Goto Top

Access 2016 Abfrage - Datumsbereich nach Jahren und Monaten summieren

Schönen guten Abend in die Runde.

Ich stehe gerade vor einem für mich nicht lösbaren Problem und bin schon Schneeblind.
Die Überschrift gibt wahrscheinlich nicht ganz her, was ich möchte..

Ich habe circa 400 Datensätze die ich aus einer Abfrage bekomme. Diese sehen wie folgt aus:

kd_nr	rg_nr	beginn	       ende	               austritt	       massnahmenummer	kursname	zusatz
40621	10146	05.02.2018	09.03.2018		               3542017	                        ITZT            	M1
40618	10150	04.12.2017	26.01.2018		               3542017	                        ITZT            	M1
40618	10151	29.01.2018	02.03.2018		               3542017	                        ITZT            	M1
40619	10162	06.08.2018	21.09.2018		               3542017	                        ITZT            	M1
40708	10312	02.09.2019	13.08.2021		               3452019	                        FISI
40682	10314	02.09.2019	13.08.2021		               3452019	                        FISI
40770	10317	02.09.2019	13.08.2021	24.04.2020      3452019	                        Irgendwas

Es gibt einen Beginn, ein Ende und ein vorzeitiges Austrittsdatum.

Nun möchte ich eine Abfrage erstellen, die es mir erlaubt jeden dieser Datensätze in die belegten Monate aufzusplitten,
um anschließend zu zählen, wie viele Personen im den Monat da waren.

Also je Person/Rechnung soll für jeden Monat der Anwesenheit ein Datensatz erstellt werden.
Wenn jemand früher ausgeschieden ist, soll zur Berechnung das Austrittdatum genommen werden.

Mein aktueller Ansatz geht so:

Ich habe mir 2 Hilfstabellen für das Jahr und den Monat erstellt. Gefüllt von 1 bis 12 und 2010 bis 2030.. als Beispiel.

Nun erstelle ich folgende Abfrage:

SELECT sys_hobj_jahre.jahr, sys_hobj_monate.monat, qry_rechnungen_zu_kursen.beginn, qry_rechnungen_zu_kursen.ende, qry_rechnungen_zu_kursen.austritt, sys_kunden.nachname, qry_rechnungen_zu_kursen.kd_nr, qry_rechnungen_zu_kursen.massnahmenummer, qry_rechnungen_zu_kursen.kursname, qry_rechnungen_zu_kursen.zusatz, DateDiff("m",[qry_rechnungen_zu_kursen].[beginn],IIf(IsNull([qry_rechnungen_zu_kursen].[austritt]),[qry_rechnungen_zu_kursen].[ende],[qry_rechnungen_zu_kursen].[austritt])) AS monate  
FROM sys_hobj_jahre, sys_hobj_monate, qry_rechnungen_zu_kursen INNER JOIN sys_kunden ON qry_rechnungen_zu_kursen.kd_nr = sys_kunden.ti_kundennummer
WHERE (((sys_hobj_jahre.jahr)>Year([qry_rechnungen_zu_kursen].[beginn]) And (sys_hobj_jahre.jahr)<Year(IIf(IsNull([qry_rechnungen_zu_kursen].[austritt]),[qry_rechnungen_zu_kursen].[austritt],([qry_rechnungen_zu_kursen].[ende]))))) OR (((sys_hobj_jahre.jahr)=Year([qry_rechnungen_zu_kursen].[beginn])) AND ((sys_hobj_monate.monat)>=Month([qry_rechnungen_zu_kursen].[beginn]))) OR (((sys_hobj_jahre.jahr)=Year(IIf(IsNull([qry_rechnungen_zu_kursen].[austritt]),[qry_rechnungen_zu_kursen].[austritt],([qry_rechnungen_zu_kursen].[ende])))) AND ((sys_hobj_monate.monat)<=Month(IIf(IsNull([qry_rechnungen_zu_kursen].[austritt]),[qry_rechnungen_zu_kursen].[austritt],([qry_rechnungen_zu_kursen].[ende])))))
ORDER BY sys_hobj_jahre.jahr, sys_hobj_monate.monat, qry_rechnungen_zu_kursen.kd_nr;

In einer zweiten Abfrage zähle ich nun die Anzahl über eine Gruppierung auf Jahre und Monate.
Das funktioniert..

Allerdings ist das Ergebnis der "ersten Abfrage" nicht wie erhofft.
Ich bekomme die Aufteilung in die monatlichen Datensätze, jedoch werden Rechnungen auch noch nach dem Enddatum in den Folgejahren angezeigt.
Ich vermute ich mache einen Denkfehler bei den Monaten..

Ich weiß gerade nicht weiter. WO IST MEIN DENKFEHLER???

Wäre super, wenn mir jemand weiterhelfen könnte..

Gruß

Content-Key: 1805442069

Url: https://administrator.de/contentid/1805442069

Printed on: April 27, 2024 at 15:04 o'clock