Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Monate zwischen zwei Datumsfeldern anzeigen (als Abfrage)

Frage Microsoft Microsoft Office

Mitglied: n4426

n4426 (Level 2) - Jetzt verbinden

08.12.2008, aktualisiert 05.01.2009, 6529 Aufrufe, 5 Kommentare

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).

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.

Mit freundlichen Grüßen
andi
Mitglied: Biber
08.12.2008 um 21:26 Uhr
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:
01.
SELECT DateDim.Jahr, DateDim.Monat 
02.
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
3) Dann führt Dich eine halbe Minute später dieses Statement zumindest in die Nähe des Ziels:
01.
SELECT M.Nachname, M.Vorname, d.monat, d.jahr, m.austritt, dateSerial(d.jahr, d.monat, 1) as ds 
02.
FROM mitglieder m, datedim d 
03.
WHERE 
04.
 DateSerial( d.jahr, d.monat,1  ) > m.Eintritt 
05.
AND 
06.
(Iif (m.Austritt is null, (1=1), DateSerial( d.jahr, d.monat+1, 1 )-1 < m.austritt) ) 
07.
 
08.
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
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
Bitte warten ..
Mitglied: n4426
09.12.2008 um 07:21 Uhr
Morgen Biber,

super, Danke. Ich hab nur noch eine kleinichkeit im ditten Teil verändern müssen:


01.
SELECT M.Nachname, M.Vorname, d.monat, d.jahr, 
02.
m.austritt, dateSerial(d.jahr, d.monat, 1) as ds 
03.
FROM mitglieder m, datedim d 
04.
 
05.
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) ) 
06.
 
07.
ORDER by 1,2,4,3 
Ohne die Tabelle mit Jahr und Monat gehts nicht, oder? (Ist hold blöd, wenn man die immer pflegen muss (aber das läst sich ja auch automatisieren))

Mit freundlichen Grüßen
andi
Bitte warten ..
Mitglied: jato11
09.12.2008 um 12:33 Uhr
Hallo Andi,
die Lösung hat dir Biber ja schon gegeben, aber
mich würde interessieren welchem Zweck das dient.
Bei 100 Namen könnte das ein paar Seiten Papier ergeben.
Normalerweise reicht doch die Anzahl der Monate zwischen
zwei Tagen, oder?

Viele Grüße
Torsten
Bitte warten ..
Mitglied: n4426
09.12.2008 um 16:18 Uhr
Hi Torsten,

es ist nicht zum ausdrucken gedacht, sondern um eine Auswertung zu fahren, ob jemand vergessen hat seine Monatlichen einträge in eine Datenbank zu machen.

Mit freundlichen Grüßen
andi
Bitte warten ..
Mitglied: Biber
09.12.2008 um 22:09 Uhr
Moin n4426,

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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Microsoft Office
gelöst Wert aus Abfrage in einem ungebundenen Textfeld im Unterformular anzeigen (7)

Frage von mreske zum Thema Microsoft Office ...

Windows 7
Kopierte Dateien im Hintergrund anzeigen (1)

Frage von MichiBLNN zum Thema Windows 7 ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...