Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfragekriterium in Abfrage aus zweiter Tabelle

Begonnen von andreasl4099, Juli 30, 2014, 15:56:56

⏪ vorheriges - nächstes ⏩

andreasl4099

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

MaggieMay

#1
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#)
);
Freundliche Grüße
MaggieMay

database

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

andreasl4099

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

MaggieMay

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?
Freundliche Grüße
MaggieMay

andreasl4099

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