Supportnet / Forum / Datenbanken
Denkanstoß
Frage
Hallo erstma... :)
Ich bräuchte einen kleinen Denkanstoß. Ich habe eine Tabelle mit allen möglichen Mitarbeitern und eine mit allen möglichen Schulungen. Über eine Dritte mit dem Namen „Teilgenommen“ die die IDs der beiden anderen Tabellen enthält kann ich die beiden verknüpfen ( welcher Mitarbeiter hat an welchen Schulungen teilgenommen)
Jetzt wird’s schwierig (für mich)
Es gibt Schulungen mit Intervall (alle x Monate) und es gibt Pflichtschulungen. Ich brauche jetzt eine Abfrage die mir alle Schulungen ausgibt, zu denen der betreffende Arbeiter noch muß ... d.h. entweder Pflichtschulungen an denen er noch nicht war, oder Intervalschulungen, bei denen der Zeitraum abgelaufen ist.
Wie würdet ihr sowas umsetzen? Ich komm auf keinen grünen Zweig... Fühl mich schon ganz verdenkt... :S
Ja vielen Dank erst mal und *wink*
me
Antwort 1 von Hinki27
Hallo Nickii,
eine nette Denksportaufgabe . Hier mein Lösungsvorschlag mit Beispieldaten
Tabelle T0001_Mitarbeiter
ID Mitarbeiter
==========================
1 Mister Perfekt
2 Frau Fleißig
3 Herr Faul
Tabelle T0001_Schulung
ID Schulung IntervallMonate
================================
1 A 0
2 B 0
3 C 0
4 IA2 2
5 IA5 5
6 IB5 5
Tabelle T0001_SchulungMitarbeiter
ID MitarbeiterID SchulungID Datum
==================================================
1 1 1
2 1 2
3 1 3
4 1 4 01.03.2005
5 1 5 01.01.2005
6 1 6 01.01.2005
7 2 1
8 2 2
9 2 5 01.01.2004
10 2 6 01.01.2005
11 2 4 01.01.2005
Das waren die Voraussetzungen, jetzt geht es ans eingemachte....
Die nächste Query enthält einen generierten Schlüssel mit den IDs (Schulung, Mitarbeiter), die ok sind
MAS_OK (Now() = 25.03.2005)
======
SELECT [SchulungID] & "_" & [MitarbeiterID] AS [Key]
FROM T0001_Schulung INNER JOIN T0001_SchulungMitarbeiter ON T0001_Schulung.ID = T0001_SchulungMitarbeiter.SchulungID
WHERE (((T0001_SchulungMitarbeiter.Datum)>DateAdd("m",-[intervallmonate],Now()))) OR (((T0001_Schulung.IntervallMonate)=0));
Key
====
1_1
2_1
3_1
4_1
5_1
6_1
1_2
2_2
6_2
Nun müssen wir nur noch die "guten" aus allen möglichen Kombinationen aussortieren...
Resultat Query Schulungsmassnahmen
===================================
SELECT T0001_Mitarbeiter.ID, T0001_Mitarbeiter.Mitarbeiter, T0001_Schulung.ID, T0001_Schulung.Schulung
FROM T0001_Mitarbeiter, T0001_Schulung
WHERE (( [t0001_Schulung].[ID] & "_" & ([T0001_Mitarbeiter].[ID] ) Not In (SELECT Key from MAS_OK)));
MID Mitarbeiter SID Schulung
=======================================================
2 Frau Fleißig 3 C
2 Frau Fleißig 4 IA2
2 Frau Fleißig 5 IA5
3 Herr Faul 1 A
3 Herr Faul 2 B
3 Herr Faul 3 C
3 Herr Faul 4 IA2
3 Herr Faul 5 IA5
3 Herr Faul 6 IB5
Viel Spass damit
Gruß
Ralf
eine nette Denksportaufgabe . Hier mein Lösungsvorschlag mit Beispieldaten
Tabelle T0001_Mitarbeiter
ID Mitarbeiter
==========================
1 Mister Perfekt
2 Frau Fleißig
3 Herr Faul
Tabelle T0001_Schulung
ID Schulung IntervallMonate
================================
1 A 0
2 B 0
3 C 0
4 IA2 2
5 IA5 5
6 IB5 5
Tabelle T0001_SchulungMitarbeiter
ID MitarbeiterID SchulungID Datum
==================================================
1 1 1
2 1 2
3 1 3
4 1 4 01.03.2005
5 1 5 01.01.2005
6 1 6 01.01.2005
7 2 1
8 2 2
9 2 5 01.01.2004
10 2 6 01.01.2005
11 2 4 01.01.2005
Das waren die Voraussetzungen, jetzt geht es ans eingemachte....
Die nächste Query enthält einen generierten Schlüssel mit den IDs (Schulung, Mitarbeiter), die ok sind
MAS_OK (Now() = 25.03.2005)
======
SELECT [SchulungID] & "_" & [MitarbeiterID] AS [Key]
FROM T0001_Schulung INNER JOIN T0001_SchulungMitarbeiter ON T0001_Schulung.ID = T0001_SchulungMitarbeiter.SchulungID
WHERE (((T0001_SchulungMitarbeiter.Datum)>DateAdd("m",-[intervallmonate],Now()))) OR (((T0001_Schulung.IntervallMonate)=0));
Key
====
1_1
2_1
3_1
4_1
5_1
6_1
1_2
2_2
6_2
Nun müssen wir nur noch die "guten" aus allen möglichen Kombinationen aussortieren...
Resultat Query Schulungsmassnahmen
===================================
SELECT T0001_Mitarbeiter.ID, T0001_Mitarbeiter.Mitarbeiter, T0001_Schulung.ID, T0001_Schulung.Schulung
FROM T0001_Mitarbeiter, T0001_Schulung
WHERE (( [t0001_Schulung].[ID] & "_" & ([T0001_Mitarbeiter].[ID] ) Not In (SELECT Key from MAS_OK)));
MID Mitarbeiter SID Schulung
=======================================================
2 Frau Fleißig 3 C
2 Frau Fleißig 4 IA2
2 Frau Fleißig 5 IA5
3 Herr Faul 1 A
3 Herr Faul 2 B
3 Herr Faul 3 C
3 Herr Faul 4 IA2
3 Herr Faul 5 IA5
3 Herr Faul 6 IB5
Viel Spass damit
Gruß
Ralf