Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: andreasl4099 am Juli 30, 2014, 15:56:56

Titel: Abfragekriterium in Abfrage aus zweiter Tabelle
Beitrag von: andreasl4099 am Juli 30, 2014, 15:56:56
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
Titel: Re: Abfragekriterium in Abfrage aus zweiter Tabelle
Beitrag von: MaggieMay am Juli 30, 2014, 19:30:15
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#)
);
Titel: Re: Abfragekriterium in Abfrage aus zweiter Tabelle
Beitrag von: database am Juli 30, 2014, 19:50:44
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)
Titel: Re: Abfragekriterium in Abfrage aus zweiter Tabelle
Beitrag von: andreasl4099 am Juli 30, 2014, 20:27:31
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
Titel: Re: Abfragekriterium in Abfrage aus zweiter Tabelle
Beitrag von: MaggieMay am Juli 30, 2014, 20:37:56
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?
Titel: Re: Abfragekriterium in Abfrage aus zweiter Tabelle
Beitrag von: andreasl4099 am Juli 31, 2014, 14:10:32
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