Monate zwischen zwei Datumsfeldern anzeigen (als Abfrage)
Access XP u. Access 2007
Hallo,
ich sitzt jetzt schon den ganzen tag dran, on komm nicht wirklich auf eine Lösung.
Ich hab eine Tabelle mit den Personendaten (in dieser Form).
Jetzt möchte ich eine Abfrage erstellen, wo dann folgendes Ergebnis raus kommt. (Beim aktuellen Monat (momentan 2008/12) wird aufgehört)
Es sollen also sämtliche Monate angezeigt werden, die zwischen den beiden Datumfeldern Eintritt und Austritt liegen.
Wenns wie oben dargestellt nicht geht, währe es auch so in der art möglich. (Trennzeichen kann auch ein anderes sein).
Hat da einer von euch eine Idee, wie man das über eine abfrage realisieren kann?
Vielen Dank für eure hilfe.
mfg
andi
Hallo,
ich sitzt jetzt schon den ganzen tag dran, on komm nicht wirklich auf eine Lösung.
Ich hab eine Tabelle mit den Personendaten (in dieser Form).
ID | Nachname | Vorname | Eintritt | Austritt |
---|---|---|---|---|
1 | Mustermann | Max | 01.02.2008 | 30.09.2008 |
2 | Musterfrau | Maxim | 01.06.2008 | 31.03.2009 |
3 | Mustermann | Herbert | 15.10.2008 |
Jetzt möchte ich eine Abfrage erstellen, wo dann folgendes Ergebnis raus kommt. (Beim aktuellen Monat (momentan 2008/12) wird aufgehört)
Nachname | Vorname | Jahr | Monat |
---|---|---|---|
Mustermann | Max | 2008 | 02 |
Mustermann | Max | 2008 | 03 |
Mustermann | Max | 2008 | 04 |
Mustermann | Max | 2008 | 05 |
Mustermann | Max | 2008 | 06 |
Mustermann | Max | 2008 | 07 |
Mustermann | Max | 2008 | 08 |
Mustermann | Max | 2008 | 09 |
Musterfrau | Maxim | 2008 | 06 |
Musterfrau | Maxim | 2008 | 07 |
Musterfrau | Maxim | 2008 | 08 |
Musterfrau | Maxim | 2008 | 09 |
Musterfrau | Maxim | 2008 | 10 |
Musterfrau | Maxim | 2008 | 11 |
Musterfrau | Maxim | 2008 | 12 |
Mustermann | Herbert | 2008 | 10 |
Mustermann | Herbert | 2008 | 11 |
Mustermann | Herbert | 2008 | 12 |
Es sollen also sämtliche Monate angezeigt werden, die zwischen den beiden Datumfeldern Eintritt und Austritt liegen.
Wenns wie oben dargestellt nicht geht, währe es auch so in der art möglich. (Trennzeichen kann auch ein anderes sein).
Nachname | Vorname | JahrMonat |
---|---|---|
Mustermann | Max | 2008/02 |
Mustermann | Max | 2008/03 |
Mustermann | Max | 2008/04 |
Mustermann | Max | 2008/05 |
Mustermann | Max | 2008/06 |
Mustermann | Max | 2008/07 |
Mustermann | Max | 2008/08 |
Mustermann | Max | 2008/09 |
Musterfrau | Maxim | 2008/06 |
Musterfrau | Maxim | 2008/07 |
Musterfrau | Maxim | 2008/08 |
Musterfrau | Maxim | 2008/09 |
Musterfrau | Maxim | 2008/10 |
Musterfrau | Maxim | 2008/11 |
Musterfrau | Maxim | 2008/12 |
Mustermann | Herbert | 2008/10 |
Mustermann | Herbert | 2008/11 |
Mustermann | Herbert | 2008/12 |
Hat da einer von euch eine Idee, wie man das über eine abfrage realisieren kann?
Vielen Dank für eure hilfe.
mfg
andi
Please also mark the comments that contributed to the solution of the article
Content-ID: 103561
Url: https://administrator.de/contentid/103561
Printed on: September 1, 2024 at 02:09 o'clock
5 Comments
Latest comment
Moin andi,
es gibt mehrere Möglichkeiten... wie im richtigen Leben.
Für die mit Abstand schnellste und Wartbarste halte ich Folgende:
1) lege Dir eine 2-Felder-Tabelle "DateDim" für Deine DatumsDimensionen "Jahr" (als Zahl) und "Monat" (als Zahl) an.
PrimaryKey ist die Kombination Jahr+Monat.
2) hack Deine paar Datensätze rein, so dass Du folgendes Ergebnis erzeugen kannst:
3) Dann führt Dich eine halbe Minute später dieses Statement zumindest in die Nähe des Ziels:
Ausgabe:
Sorry, gerade keine Ruhe zum Schön-Formatieren
[Edit: Monate Feb 2009 und märz2009 hab ich nicht in "meiner" Datedim. Deshalb fehlen die hier.]
Is' nich' nobelpreisverdächtig, aber Du bist noch heute zum Essen zu Hause....
Grüße
Biber
es gibt mehrere Möglichkeiten... wie im richtigen Leben.
Für die mit Abstand schnellste und Wartbarste halte ich Folgende:
1) lege Dir eine 2-Felder-Tabelle "DateDim" für Deine DatumsDimensionen "Jahr" (als Zahl) und "Monat" (als Zahl) an.
PrimaryKey ist die Kombination Jahr+Monat.
2) hack Deine paar Datensätze rein, so dass Du folgendes Ergebnis erzeugen kannst:
SELECT DateDim.Jahr, DateDim.Monat
FROM DateDim;
Jahr Monat
2008 1
2008 2
2008 3
2008 4
2008 5
2008 6
2008 7
2008 8
2008 9
2008 10
2008 11
2008 12
2009 1
SELECT M.Nachname, M.Vorname, d.monat, d.jahr, m.austritt, dateSerial(d.jahr, d.monat, 1) as ds
FROM mitglieder m, datedim d
WHERE
DateSerial( d.jahr, d.monat,1 ) > m.Eintritt
AND
(Iif (m.Austritt is null, (1=1), DateSerial( d.jahr, d.monat+1, 1 )-1 < m.austritt) )
ORDER by 1,2,4,3
Ausgabe:
Nachname Vorname monat jahr austritt ds
Musterfrau Maxim 7 2008 31.03.09 01.07.08
Musterfrau Maxim 8 2008 31.03.09 01.08.08
Musterfrau Maxim 9 2008 31.03.09 01.09.08
Musterfrau Maxim 10 2008 31.03.09 01.10.08
Musterfrau Maxim 11 2008 31.03.09 01.11.08
Musterfrau Maxim 12 2008 31.03.09 01.12.08
Musterfrau Maxim 1 2009 31.03.09 01.01.09
Mustermann Herbert 11 2008 01.11.08
Mustermann Herbert 12 2008 01.12.08
Mustermann Herbert 1 2009 01.01.09
Mustermann Max 3 2008 30.09.08 01.03.08
Mustermann Max 4 2008 30.09.08 01.04.08
Mustermann Max 5 2008 30.09.08 01.05.08
Mustermann Max 6 2008 30.09.08 01.06.08
Mustermann Max 7 2008 30.09.08 01.07.08
Mustermann Max 8 2008 30.09.08 01.08.08
[Edit: Monate Feb 2009 und märz2009 hab ich nicht in "meiner" Datedim. Deshalb fehlen die hier.]
Is' nich' nobelpreisverdächtig, aber Du bist noch heute zum Essen zu Hause....
Grüße
Biber
Moin n4426,
Doch, natürlich. Alles außer Brotschneiden geht.
Sind doch letztlich nur ein paar Nullen und Einsen, die in sinnvoller Reihenfolger angeordnet werden müssen.
ABER: (auf die Gefahr, dass ich mich wiederhole, ich habe es im letzten Kommentar schon in etwa genauso formuliert)
Die gepostete Strategie
Also WTF willst Du lieber eine unwartbare Pivot-Auswertung oder ein 87-Zeilen-Statement mit vier Subselects oder eine Stored Procedure mit einem 3-Stündigen Erstellungsaufwand statt dessen haben???
Falls diese DateDim-Tabelle mit ihren 2 Feldern und paar Dutzend Sätzen Deine Access-MDB hart ans Limit bringt....das täte mir Leid, aber dann ists eh Schicht mit komplexeren Statements.
Wohl gemerkt, ich bin der Meinung, dass man/frau ziemlich alles programmieren kann.
Aber nicht alles programmieren muss.
Grüße
Biber
Ohne die Tabelle mit Jahr und Monat gehts nicht, oder?
Doch, natürlich. Alles außer Brotschneiden geht.
Sind doch letztlich nur ein paar Nullen und Einsen, die in sinnvoller Reihenfolger angeordnet werden müssen.
ABER: (auf die Gefahr, dass ich mich wiederhole, ich habe es im letzten Kommentar schon in etwa genauso formuliert)
Die gepostete Strategie
- lässt sich innerhalb von Sekunden gedanklich skizzieren und nachvollziehen
- innerhalb von 10 Minuten implementieren (zumindest der proof-of-concept-Teil)
- innerhalb von 1 Stunde "produktiv" einsetzen
- hat übers Jahr gesehen für die Pflege der DateDim-Tabelle einen täglichen Wartungsaufwand von einmal Kaffee-Umrühren
- und kann im Falle Deiner Beförderung ohne Bedenken von der pummeligen Praktikantin aus dem Dritten weitergepflegt werden...
Also WTF willst Du lieber eine unwartbare Pivot-Auswertung oder ein 87-Zeilen-Statement mit vier Subselects oder eine Stored Procedure mit einem 3-Stündigen Erstellungsaufwand statt dessen haben???
Falls diese DateDim-Tabelle mit ihren 2 Feldern und paar Dutzend Sätzen Deine Access-MDB hart ans Limit bringt....das täte mir Leid, aber dann ists eh Schicht mit komplexeren Statements.
Wohl gemerkt, ich bin der Meinung, dass man/frau ziemlich alles programmieren kann.
Aber nicht alles programmieren muss.
Grüße
Biber