Mitarbeiterübersicht erstellen

Hallo,

ich habe eine Tabelle in der die Mitarbeiter einer Firma hinterlegt sind.
Diese Mitarbeiter sollen nach Datum den Filialen zugeordnet werden, an den Tagen, an denen sie in den Filialen arbeiten sollen, ungefähr so:
Datum Filiale Mitarbeiter
01.05.08 Filiale1 Klaus
01.05.08 Filiale1 Peter
01.05.08 Filiale2 Karl
02.05.08 Filiale1 Klaus
02.05.08 Filiale1 Karl

Daraus soll nun eine Übersicht erstellt:
Komplett Datum Filiale1 Filiale2
Ja 01.05.08 2 1
Nein 02.05.08 2 0

„Komplett“ bedeutet in dem Zusamenhang, ob jede Filiale an besagtem Datum besetzt ist. Unter der der jeweiligen Filiale steht dann die Anzahl der Mitarbeiter, die an diesem Datum anwesend seien sollen.

Kann mir jemand sagen, wie man das am besten macht?

Danke,

Andre

Hallo Andre,

Kann mir jemand sagen, wie man das am besten macht?

mit einem Bericht der als Basis eine einfache Abfrage, oder Pivot-Abfrage hat.

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Andre,

was Netwolf andeuten wollte, Du hast die Datenbankversion vergessen! Netwolf setzt in seiner Antwort voraus, dass es Access ist.

Sollte es SQL sein, kann ich nur hoffen, dass es a) eine feste Anzahl von Filialen existiert und b) Dein SQL eine IF-Funktion (bei Oracle nennt sich diese decode) existiert. Dann bildest Du pro Tag (group by) die Summe über die Datensätze wobei Du 1 aufaddierst, wenn der Datensatz zur gesuchten Filiale gehört, ansosnten eine 0. Die Aussage Komplett erhälst Du, indem Du die Werte mit einander multiplizierst und bei 0 ein NEIN und ansonsten ein JA ausgibst. Dabei gehe ich davon aus, dass eine Filiale bereits besetzt ist, wenn mindestens 1 Person anwesend ist (ist das nicht der Fall, wird das Ganze etwas komplexer!).

Genauers oder ein SQL-Statement nach Herausgabe der gewünschten Detail-Informationen.

MfG Georg V.

Daraus soll nun eine Übersicht erstellt:
Komplett Datum Filiale1 Filiale2
Ja 01.05.08 2 1
Nein 02.05.08 2 0

„Komplett“ bedeutet in dem Zusamenhang, ob jede Filiale an
besagtem Datum besetzt ist. Unter der der jeweiligen Filiale
steht dann die Anzahl der Mitarbeiter, die an diesem Datum
anwesend seien sollen.

Hi Georg,

Netwolf lag richtig - es handelt sich um Access.
Abgesehen davon das ich nicht der Experte in SQL bin sehe ich da leider eines der größten Probleme: Ist eine Filiale nicht besetzt, dann ist die Filiale wohl auch null.
Das ist Sinn und Zweck der Abfrage, um halt zu kontrollieren wie bzw. ob überhaupt die Filialen besetzt sind.

Gruß,
Andre

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

Hallo Andre,

Hi Georg,

Netwolf lag richtig - es handelt sich um Access.

Jetzt darüber zu philosopieren, warum es ein Access-Brett gibt, wäre wahrscheinlich vergeblich.

Abgesehen davon das ich nicht der Experte in SQL bin sehe ich
da leider eines der größten Probleme: Ist eine Filiale nicht
besetzt, dann ist die Filiale wohl auch null.

Falls Dir die Null fehlt, in der Abfrage, dann würde ich an den Text der Abfrage die in etwa so aussehen sollte:

TRANSFORM Count(Work.Mitarbeiter) AS AnzahlvonMitarbeiter
SELECT Work.Datum
FROM [Work]
GROUP BY Work.Datum
PIVOT Work.filiale;

statt der count-Funktion
ein

 nz(Count(Work.Mitarbeiter),0) 

einfügen.

Aber bevor Du Dich zu früh freust, was ist wenn Deine Beispielsdaten eigentlich den Zeitraum vom 15. bis zum 17. abdecken sollen, also am 17. noch überhaupt keine Filiale besetzt ist?

MfG Georg V.

Erstmal vielen Dank.

Ok, den Fehler mit Access gestehe ich ein …
Ansonsten geht es nach diesem Schema - bis auf das angesprochene Problem, wenn ein Datum noch gar nicht besetzt - sprich null - ist.
Ich versuche gerade sowas wie eine Tabelle Arbeitstage einzubauen, in der die einzelnen Datumsangaben sind, und mit der Privot Abfrage zu verknüpfen - geht auch, nur greift nz(Count(Work.Mitarbeiter),0) dann aus irgendeinem Grund nicht mehr - dann bleibt es einfach null.
Aber das ist nicht ganz so wichtig.

Größer ist das Problem, dass nz(Count(Work.Mitarbeiter),0) mir zwar anzeigt, wieviele Mitarbeiter insgesamt eingesetzt werden, aber leider nicht, ob wirklich alle Filialen besetzt sind.
Der Count() Befehl verhält sich ehr wie Sum() - sprich wenn in Filiale1 2 Mitarbeiter sind, in Filiale2 ist an dem Tag einer und in Filiale3 keiner, dann ergibt der Count den Wert 3.
Kann ich das noch irgendwie prüfen, also was in der Richtung, dass der Count nur greift wenn der Wert >0 ist und wenn der Wert >1 ist, er trotzdem nur eine 1 addiert?

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

Hallo Andre,

Ich versuche gerade sowas wie eine Tabelle Arbeitstage
einzubauen, in der die einzelnen Datumsangaben sind, und mit
der Privot Abfrage zu verknüpfen - geht auch, nur greift
nz(Count(Work.Mitarbeiter),0) dann aus irgendeinem Grund nicht
mehr - dann bleibt es einfach null.

Ohne Query kein Support: ein NZ auf einem Filialausdruck kann keine NULL bei einem Join mit einer Tagestabelle korrigieren: Hier musst Du notfalls zweimal diese Funktion anwenden.

Größer ist das Problem, dass nz(Count(Work.Mitarbeiter),0) mir
zwar anzeigt, wieviele Mitarbeiter insgesamt eingesetzt
werden, aber leider nicht, ob wirklich alle Filialen besetzt
sind.

Du hattest im gegeben Beispiel nicht anderes gefordert! Und manchmal hilft auch pure Mathematik: Es gibt eine Vorzeichenfunktion (in Access lautet sie SGN, gibt bei negativen Werten eine -1, bei 0 eine 0 und bei positiven Werte eine +1 zurück.

TRANSFORM sgn(nz(Count(Work.Mitarbeiter),0)) AS AnzahlvonMitarbeiter
SELECT Work.Datum
FROM [Work]
GROUP BY Work.Datum
PIVOT Work.filiale;

Und selbst wenn diese Funktion nicht existieren würde, es gibt immer noch eine IIF-Funktion:

iif(nz(Count(Work.Mitarbeiter),0)=0,0,1) 

MfG Georg V.