Supportnet Computer
Planet of Tech

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