Zeitraumabfrage !HILFE!

Hallo,

ich habe ein Problem ich muß einen SQL erstellen der eine Abfrage aus einer DATENBANK macht die so auszusehen hat.

Zur Verfügung stehen mir das STARTDATUM und das ENDEDATUM.

Ich muß jetzt Prüfen, ob ein Fahrer für diesen zeitraum schon Unterwegs ist.

Die Tabellen Fahrer und Auftrag sind schon vorhanden.

Ich muß jetzt die Fahrer mir ausgeben lassen die für diesen Zeitraum noch zur Verfügung stehen.

Ich wäre sehr Dankbar wenn mir jemand Helfen kann denn ich sitzte da schon sehr lange dran und komme einfach nicht weiter.

DANKE

Hallo,

ich habe ein Problem ich muß einen SQL erstellen der eine
Abfrage aus einer DATENBANK macht die so auszusehen hat.

Welche Datenbank ? Oracle ??

Hallo.

Mal abgesehen davon, dass Du, anstatt !!!HILFE!!! zu bölken besser geschrieben hättest, in welcher Umgebung Du Dich bewegst, fehlt auch inhaltlich einiges an Fleisch. Ich kann Dir deswegen nur einen abstrakten Lösungsweg aufzeigen.

Seien Deine Tabellen :
tbl_Fahrer (A)
tbl_Auftrag_vergeben (B)
tbl_Auftrag_neu ©

wobei A und B mit einer n:m-Relation verknüpft sind (ein Fahrer kann mehrere Aufträge haben, ein Auftrag aber auch von mehreren Fahrern bedient werden). Dann brauchst Du eine Tabelle tbl_Auftrag_Fahrer (D) mit der Verknüpfung der Primärschlüssel aus A und B.

Zur Verfügung stehen mir das STARTDATUM und das ENDEDATUM.

für den neu zu vergebenden Auftrag aus Tabelle C und für die bereits vergebenen Aufträge aus der Relation AB.

Ich muß jetzt die Fahrer mir ausgeben lassen die für diesen
Zeitraum noch zur Verfügung stehen.

SELECT tbl_Fahrer.Fahrer_ID, Fahrer_Name, tbl_Auftrag_vergeben.Auftrag_ID, Auftrag_Start, Auftrag_Ende FROM tbl_Fahrer, tbl_Auftrag_vergeben, tbl_Auftrag_Fahrer INNER JOIN ON (tbl_Auftrag_Fahrer.FahrerID=tbl_Fahrer.FahrerID INNER JOIN ON (tbl_Auftrag_vergeben.AuftragID=tbl_Auftrag_Fahrer.AuftragID));

das sollte Dir alle Fahrer mit ihren Aufträgen + Beginn und Ende liefern. Nennen wir diesen Sums der Einfachheit halber Query_X.

SELECT Auftrag_ID, Auftrag_Start, Auftrag_Ende FROM tbl_Auftrag_neu;

zeigt Dir Beginn- und Endtermin für alle neuen Aufträge. Das sei die Query_Y.

Fiktiver Datenbestand Query_X

1 Müller 4711 5.9.06 8.9.06
2 Meier 4712 3.9.06 6.9.06
3 Meier 4713 7.9.06 9.9.06
4 Schulze 4714 2.9.06 5.9.06

Fiktiver Datenbestand Query_Y

4715 8.9.06 9.9.06
4716 10.9.06 11.9.06

Nun möchtest Du gern als Ergebnis haben, dass Du für Auftrag 4715 nur den Schulze, für 4716 aber jeden der vier Hansels einsetzen kannst … richtig verstanden?

SELECT Query_Y.Auftrag_ID, Query_X.Fahrer_ID, Query_X.Fahrer_Name, Query_Y.Auftrag_Start, Query_Y.Auftrag_Ende FROM Query_X, Query_Y WHERE ((Query_Y.Auftrag_Start>Query_X.Auftrag_Ende) OR (Query_Y_Auftrag_Ende4715 Schulze 8.9.06 9.9.06
4715 Meier 8.9.06 9.9.06
4716 Müller 10.9.06 11.9.06
4716 Meier 10.9.06 11.9.06
4716 Schulze 10.9.06 11.9.06Was fast das richtige Ergebnis ist. Der zweite Datensatz ist ein falsches Ergebnis, weil Meier ja bereits einen Auftrag an diesem Tag hat. Da aber ein satzweiser Vergleich vorgenommen wurde, wird dieser falsche Satz mit ausgegeben.

Hm. An dieser Stelle müsste ich tatsächlich wissen, welches System Du hast - wir müssten nämlich an irgendeiner Stelle noch aggregieren, bevor wir mit Query_Z loslegen können.

Tippfehler vorbehalten - meine Brause kann kein SQL.

Waiting for input,
Eillicht zu Vensre

Hey
Danke schon mal im vorraus ich versuche es dann mal.

Sorry habe vergessen noch zu sagen das dieser SQL für ACCESS Datenbank ist, mit der Version 97 und in der Programmiersprache Visual Basic 6.0. mit der Connection von DAO verbinde ich mich.

1 Fahrer kann mehrere Aufträge haben aber immer nur einen nach dem anderen ausführen.
Zur verfügung stehen mir das Startdatum und das Enddatum,
in der Datenbank stehen alle Fahrerangaben und in der Tabelle Auftäge stehen alle Aufträge drin die den Fahrer zugeordnet wurden.

Danke

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
dann mache eine Abfrage in der du erst abfragst welche Fahrer in dem Zeitraum eine Tour haben.
Dann erstellst du eine zweite Abfrage in der du alle vorhandenen Fahrer mit dem Ergebnis der ersten Abfrage vergleichst. Wobei du alle Fahrer aus der Fahrertabelle ausgibst. (also kein inner join)
Die Fahrer die auf der Tourseite keine Entsprechung haben sind noch frei.

Oder gehe in VBA mit einer Schleife durch alle Fahrer und frag einzeln ab ob sie in der Zeit frei sind.

Oder mache eine Subselect mit dem „IN“ bzw „NOT IN“ Konstrukt.

Gruss
Quaser