Abfrage mit Anzeige 0 - Die 2

Hallo,

ich hatte am 07.11.08 schonmal zu dem Thema gepostet, aber mein Ansatz war falsch, weshalb ich einen neuen Beitrag aufmache:

Ich habe eine umfangreiche Tabelle mit den Feldern „Mitarbeiter“, „Datum“ und „Ergebnis“. Das Feld „Mitarbeiter“ enthält nur einen Wert zwischen 1 und 9 und das Feld „Ergebnis“ kann nur den Wert „0“ für negativ und „1“ für positiv enthalten.
Jetzt möchte ich zählen, wieviele positive Ergbnisse Mitarbeiter 1 im Zeitraum 01.10.08 bis 31.10.08 hatte. Diese Abfrage ist kein Problem.
Aber: Mitarbeiter 2 war vom 01.10.08 bis 31.10.08 nicht im Dienst und wird demzufolge in der Abfrage nicht mit Ergebnissen, auch nicht dem gewünschten Ergebnis Anzahl 0 aufgeführt. Jetzt ist mir auch klar warum, es gibt ja keine Einträge im Suchzeitraum oktober 2008, sondern nur davor oder danach.

Daher meine Frage, ob ich Access (2003) irgendwie dazu bewegen kann, dass er mir alle Mitarbeiter auflistet und für den Fall, dass es im gesuchten Zeitraum keinen Datensatz gibt, die Anzahl 0 bei den Ergebnissen liefert.

Dank im voraus

Gruß
Ronny

Moin, Ronny,

häng das Ergebnis 0 für die Mitarbeiter, die nicht im Dienst waren, mit einem Union dran. So etwa

 Select MA, Ergebnis from Ergebnistabelle
 Union 
 Select MA, 0 from Mitarbeitertabelle 
 where MA not in 
 (
 Select Ma from Ergebnistabelle
 ) 

Wird ein wenig aufwendiger, weil Du ja die Zeiträume berücksichtigen musst :smile:

Gruß Ralf

Hallo Ralf und danke für die superschnelle Antwort :wink:

Meine SQL-Kenntnisse dümpeln bei 0, da mir bisher der Access-Abrageentwurfsmodus mittels Drag&Drop gereicht hat. Ich kann daher den SQL-Code nicht im erforderliche Maße interpretieren ;-(

Hier mal mein vorhandener Code:

SELECT ergebnistabelle.ma, ergebnistabelle.datum, ergebnistabelle.ergebnis
FROM ergebnistabelle
WHERE (((ergebnistabelle.datum) Between #10/1/2008# And #10/31/2008#));

Wo kommt wie die UNION-Anweisung hin?

Dank im voraus für die gemachte Mühe

Gruß
Ronny

Hi Ronny,

Wo kommt wie die UNION-Anweisung hin?

immer zwischen zwei vollständige Select-Anweisungen.

Hinweis am Rande: Das Ergebnis des Union lässt sich nicht sortieren. Falls Sortieren nötig wird, das Ganze als Abfrage aufbauen und die dann sortieren.

Gruß Ralf

Hallo Ralf, ich hatte meine Frage falsch formuliert:

Wo kommt die komplette Union-Anweisung hin?

SELECT ergebnistabelle.ma, ergebnistabelle.datum, ergebnistabelle.ergebnis
FROM ergebnistabelle
WHERE (((ergebnistabelle.datum) Between #10/1/2008# And #10/31/2008#));
Union
Select MA, 0 from Mitarbeitertabelle
where MA not in
(
Select Ma from Ergebnistabelle
)

Da erhalte ich eine Fehlermeldung.

Wie gesagt, mit SQL hatte ich bisher nix am Hut, mein Hauptaugenmerk bei Access lag bisher bei der VBA-Programmierung der Datenbanken.

Gruß
Ronny

Hi Ronny,


WHERE (((ergebnistabelle.datum) Between #10/1/2008# And
#10/31/2008#));

dieses Semikolon muss raus, das kennzeichnet das Ende der Anweisung

Union

Da erhalte ich eine Fehlermeldung.

Hoffentlich :smile:))
Für die Zuckumpft: Bei Fehlermeldungen bitte immer den vollständigen Text angeben.

Gruß Ralf

Hallo,

dank Ralf’s Ideenansatz habe ich das Problem wie folgt gelöst:

(SELECT Distinct ma,0 FROM mitarbeitertabelle)
UNION
(SELECT ergebnistabelle.ma, count(ergebnis) FROM ergebnistabelle WHERE((ergebnistabelle.datum) Between #10/1/2008# And #10/31/2008#) GROUP BY ma);

Gruß
Ronny