PDA

Vollständige Version anzeigen : SQL Abfrage


Wasi
22.03.2006, 11:15
Hallo zusammen,

Ich habe zwei Tabellen: Mitarbeiter und Projekte. In Projekte wird auch die Mitarbeiter_ID gespeichert. Das aktuelle Projekt wird entsprechend markiert (Wahr/Falsch).

Ich versuche mich jetzt schon etwas länger an einer Abfrage, die mir alle Mitarbeiter und falls vorhanden, deren aktuelles Projekt ausgibt.


Bin für jeden Tipp ... schon mal vielen Dank.

Grüße, Wasi.

Verdener80
22.03.2006, 11:23
Solltest du im Abfrage-Entwurfsmodus hinbekommen. Beide Tabellen einfügen, miteinander verknüpfen (über Mitarbeiter_ID), die Verknüpfungseigenschaft so einstellen, dass alle Daten aus Mitarbeiter angezeigt werden und nur die aus Projekte, bei denen die Daten übereinstimmen. Dann ziehst du dir die Felder rein, die du benötigst inkl. aktuelles Projekt. Bei aktuelles Projekt setzt du nun als Kriterium 'WAHR' ein.

Verdener80
22.03.2006, 11:25
Ich glaube, da habe ich wohl ein wenig zu unüberlegt geantwortet. Sorry! So wirst du nicht die benötigten Daten erhalten.

Wasi
22.03.2006, 11:30
Danke für die schnelle Antwort ... mit right join und einem Kriterium hatte ich es auch schon versucht, dann werden aber die Mitarbeiter, denen Projekte zugeordnet sind, aber keines mehr aktuell ist, nicht angezeigt.
Mit DomWert klappt's auch nicht richtigt ... hat ein Mitarbeiter mehrere aktuelle Projekte wird er dann ja nur einmal angezeigt.

Nouba
22.03.2006, 11:40
SELECT
M.*
, P.PROJEKTID
FROM MITARBEITERTABELLE AS M
LEFT JOIN PROJEKTTABELLE AS P
ON M.MITARBEITERID = P.MITARBEITERID
WHERE P.AKTUELLWenn der Mitarbeiter in mehreren Projekten aktiv ist (Feld AKTUELL ist wahr), dann erscheint er in dieser Form natürlich mehrmals im Abfrageergebnis.

Wasi
22.03.2006, 12:00
Das funktioniert super ... danke! Wie muss ich die Abfrage anpassen, so dass auch die Mitarbeiter ohne Projekte angezeigt werden?

Nouba
22.03.2006, 12:03
Erweitere das Kriterium mit <tt>OR P.MITARBEITERID Is Null</tt>.

Wasi
22.03.2006, 12:15
Danke ... allerdings klappts doch noch nicht so, wie oben beschrieben.

Angezeigt werden jetzt Mitarbeiter mit aktuellen Projekten oder ganz ohne. Die Mitarbeiter, denen ein Projekt zugeordnet ist, aber keines davon aktuell ist, werden nicht angezeigt.

Nouba
22.03.2006, 12:51
Dann wird man vermutlich zuerst eine Abfrage über die Projekttabelle erstellen müssen, deren Inhalt ich nicht genau kenne. Ich gehe davon aus, dass es ein Datum/Uhrzeitfeld gibt und Du das letzte Projekt eine Mitarbeiters haben willst, der an keinem aktuellen Projekt zur Zeit teilnimmt.
SELECT
MP.PROJEKTID
, MP.MITARBEITERID
, MP.PM_DATUM
, MP.AKTUELL
FROM MP_STATUS_TABELLE AS MP
WHERE
MP.AKTUELL OR
MP.PM_DATUM = (
SELECT TOP 1
PM_DATUM
FROM MP_STATUS_TABELLE
WHERE MITARBEITERID = MP.MITARBEITERID
ORDER BY PM_DATUM DESC);
Damit sollte ein Left Join von der Mitarbeitertabelle auf diese Abfrage über das Feld MITARBEITERID zum gewünschten Resultat führen. Bei größerem Datenbestand wäre das Datumsfeld in der Projektstatustabelle absteigend zu indizieren und das Feld AKTUELL sollte auch einen Index erhalten.

Wasi
22.03.2006, 13:13
Also die Projekte werden zwar mit Datum gespeichert, allerdings hat das keinen Wert für die Sortierung (meistens nicht bekannt oder falsch). Eigentlich möchte ich nur eine Übersicht aller Mitarbeiter haben inkl. des jeweilig aktuellen Projekts. Interessant an dieser Übersicht sind dann auch in erster Linie die Mitarbeiter ohne aktuelles Projekt (weil die eins brauchen), wobei egal ist, ob sie schon mal an einem beteiligt waren oder nicht.

Im Prinzip soll die Abfrage wie ein DomWert (im Formular) funktionieren, nur dass das dann nicht bei Mitarbeitern mit mehreren Projekten geht.


Alles im allem ... Danke für Deine Unterstützung. Ich werds mal mit zwei Abfragen probieren.