Top-Themen

Aktuelle Themen (A bis Z)

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, 6713 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.

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

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

mfg
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 ..
Ähnliche Inhalte
Exchange Server
Zwei verschiedene OWA auf zwei SBS2011 über einen Internetanschluß abfragen
gelöst Frage von IT-comExchange Server4 Kommentare

Hallo, ich habe ein Problem mit zwei OWA Zugriffen über eine extene IP. Zwei Firmen mit je einem SBS2011 ...

PHP
MySQL Abfrage aus Textarea ausführen und anzeigen.
gelöst Frage von MrHToastPHP2 Kommentare

Hallo, ich habe die Aufgabe eine HTML Seite zu erstellen. Mit der man eine variable MySQL Abfrage ausführen kann, ...

Datenbanken
Hibernate sql abfrage in mssql anzeigen
Frage von Thor01Datenbanken1 Kommentar

Hallo, gibt es die Möglichkeit das ich mir alle SQL Queries die auf eine MSSQL abgesetzt werden anzeigen (mitloggen) ...

Microsoft Office
Excel: Fixwerte pro Monate nach Monaten zuordnen
gelöst Frage von simsMicrosoft Office2 Kommentare

Hallo Leute, ich habe Fixwerte pro Monat, sprich von Jänner bis Dezember (rot eingekreist). Jetzt möchte ich gerne diese ...

Neue Wissensbeiträge
Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 46 MinutenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 2 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 5 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 11 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

E-Business
Bankgeheimnis abgeschafft - wie kann ich mich wehren?
Frage von honeybeeE-Business13 Kommentare

Hallo, ich nehme Bezug auf diesen Artikel: Als ich das gelesen habe, wurde mir schlecht Es geht ja niemanden ...