Hallo Forum,
ich habe zwei Tabellen und zwar
Mitarbeiter (MAID, MA, vonDatum, bisDatum) mit befristeten Arbeitstagen und
Urlaub(MAID, MA, Urlaubvon, Urlaubbis).
Die Mitarbeiter habe befristete Arbeitsverträge und auch Urlaub.
Ich muss nun für die Arbeitseinteilung ein Formular mit einem DropDown erstellen, wo man die Ma auswählen kann.
Nur sollen in diesem Dropdown je Arbeitstag nur jene angezeigt werden, welche noch einen Arbeitsvertrag haben aber nicht gerade im Urlaub sind.
Meine Abfrage dazu:
SELECT tblMitarbeiter.[MA-ID], tblMitarbeiter.Name, tblMitarbeiter.gültig_von, tblMitarbeiter.gültig_bis, tblUrlaub.Urlaub_von, tblUrlaub.Urlaub_bis
FROM tblMitarbeiter LEFT JOIN tblUrlaub ON tblMitarbeiter.[MA-ID] = tblUrlaub.[MA-ID]
WHERE (((tblMitarbeiter.gültig_von)<=#8/1/2014#) AND ((tblMitarbeiter.gültig_bis)>=#8/1/2014#) AND ((tblUrlaub.Urlaub_von)<=#8/1/2014#) AND ((tblUrlaub.Urlaub_bis)>=#8/1/2014#));
Mein Problem - die Abfrage liefert entweder alle (auch mit Urlaub) oder keinen Datensatz.
Ich bin am Ende meiner Weisheit :o
Danke
LG Andi
Hallo,
kann es sein, dass es mehrere Datensätze mit befristeten Verträgen zu einem Mitarbeiter gibt?
Zitatentweder alle oder keine
Aber doch sicher nicht beides mit ein und derselben Abfrage, oder?
PS:
Versuche es doch mal folgendermaßen:
SELECT tblMitarbeiter.[MA-ID], tblMitarbeiter.Name,
tblMitarbeiter.gültig_von, tblMitarbeiter.gültig_bis
FROM tblMitarbeiter
WHERE
((tblMitarbeiter.gültig_von)<=#8/1/2014#) AND
((tblMitarbeiter.gültig_bis)>=#8/1/2014#) AND
NOT EXISTS (Select Null From tblUrlaub
Where ((tblUrlaub.Urlaub_von)<=#8/1/2014#) AND
((tblUrlaub.Urlaub_bis)>=#8/1/2014#)
);
Hi,
WHERE (((tblMitarbeiter.gültig_von)<=#8/1/2014#) AND ((tblMitarbeiter.gültig_bis)>=#8/1/2014#) AND ((tblUrlaub.Urlaub_von)<=#8/1/2014#) AND ((tblUrlaub.Urlaub_bis)>=#8/1/2014#));
um festzustellen ob jemand einen gültigen Vertrag hat sollte das Vertragsende nach dem aktuell abgefragten Datum liegen - also
WHERE tblMitarbeiter.gültig_bis > #8/1/2014#
um zu sehen ob jemand auf Urlaub ist darf sich das aktuell gefragte Datum NICHT zwischen Beginn und Ende des Urlaubs befinden - also
AND #8/1/2014# NOT BETWEEN tblUrlaub.Urlaub_von AND tblUrlaub.Urlaub_bis
somit ....
WHERE tblMitarbeiter.gültig_bis > #8/1/2014# AND #8/1/2014# NOT BETWEEN tblUrlaub.Urlaub_von AND tblUrlaub.Urlaub_bis
Versuch das mal
Wobei es einfacher wird, wenn du die relevanten Datumswerte in Stringvariablen verpackst.
Siehe dazu auch
http://www.donkarl.com?FAQ6.8 (http://www.donkarl.com?FAQ6.8)
Hallo,
danke für die raschen Antworten - werde morgen mein Glück versuchen.
PS.: MaggieMay: es soll in einer Abfrage passieren, welche Grundlage für ein DropDown sein soll.
Database: sonst verpacke ich die Datumswerte sowieso in Variable. Hier habe ich zur besseren Lesbarkeit das Datum genommen.
lg Andi
Hi,
Zitat von: andreasl4099 am Juli 30, 2014, 20:27:31
MaggieMay: es soll in einer Abfrage passieren, welche Grundlage für ein DropDown sein soll.
welche meiner Fragen glaubst du damit beantworten zu können?
Hallo ;),
es ist vollbracht!! ;D
Falls wer auch so was braucht hier die Where-Klausel :
WHERE tblMitarbeiter.gültig_von<=[Formulare]![frmEinteilung]![txtDatum] AND tblMitarbeiter.gültig_bis>=[Formulare]![frmEinteilung]![txtDatum] AND [Formulare]![frmEinteilung]![txtDatum] Not Between Nz[tblUrlaub].[Urlaub_von] And Nz[tblUrlaub].[Urlaub_bis];
Danke für Eure Hilfe!!
PS: Maggie May dachte an die zweite Frage??
lg
Andi