Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage: Nein Kontrollkästchen zählen

Begonnen von ArtagonDeadeye, November 26, 2018, 15:49:02

⏪ vorheriges - nächstes ⏩

ArtagonDeadeye

Huhu

Nachdem ich nun fast einen ganzen Tag Recherche darauf verwendet und zu keinem Ergebnis gekommen bin, stehe ich kurz davor vor Wut in den Tisch zu beißen. Vielleicht kann mich ja jemand davon abhalten ;)

Situation:
Für einen Betrieb soll eine simple Datenbank aufgebaut werden, welche eine Übersicht über die aktuellen Maßnahmen zur Arbeitssicherheit bietet und eine Bearbeitung derselben ermöglicht.
Es gibt nur eine Tabelle, welche in Bild 001 ersichtlich ist.
Auf dem ersten Formular (Startseite) soll die Anzahl der noch offenen Maßnahmen pro Mitarbeiter intuitiv eingeblendet sein (Bild 002).

Lösungsansatz:
Für die Anzeige der Maßnahmen habe ich ein Diagramm ausgewählt, da die nächste logische Alternative (meinem begrenzten Wissen nach) ein Listenfeld ist, welches mit einer hässlichen Trennlinie aufwartet, welche ich nicht weg bekomme. Das Diagramm ist mit einer Abfrage verknüpft mit folgendem SQL-Code:

SELECT Rohdaten_GefMass.VerantwortlicherGefMass, Count(Rohdaten_GefMass.ErledigtGefMass) AS AnzahlvonErledigtGefMass1
FROM Rohdaten_GefMass
GROUP BY Rohdaten_GefMass.VerantwortlicherGefMass
ORDER BY Count(Rohdaten_GefMass.ErledigtGefMass) DESC;


Problem:
Ganz stumpf gesagt, funktioniert das Zählen nicht. Ich möchte nur die Anzahl der nicht angekreuzten "ErledigtGefMass" wiedergeben. Dummerweise, wenn ich den obigen Code mit

HAVING (((Count(Rohdaten_GefMass.ErledigtGefMass))=0))

oder "False", "Falsch", "Nein" oder was auch immer erweitere, bekomme ich nur eine leere Tabelle.

Kann mir jemand vielleicht einen Tipp geben in welche Richtung ich denken muss? Ich habe es schon mit reinen Textfeldern versucht, aber das funktioniert mit Anzahl offensichtlich auch nicht.

Lachtaube

SELECT VerantwortlicherGefMass,
       Count(*) AS AnzahlvonErledigtGefMass1
FROM   Rohdaten_GefMass
WHERE  RErledigtGefMass = False
GROUP  BY VerantwortlicherGefMass;
ORDER  BY 2 DESC;
Grüße von der (⌒▽⌒)

ArtagonDeadeye

Danke Dir Lachtaube, das funktioniert super!  ;D

Hast Du Lust mir zu erklären was der Unterschied zwischen HAVING und WHERE ist?
So wie ich das verstanden habe, strukturiert HAVING "nur" das Ergebnis während WHERE in die Suchabfrage mit eingebunden ist.

Und noch eine kleine Frage, wenn es erlaubt ist:
Stellt AnzahlvonErledigtGefMass1 eine Variable (Array) dar, in welche das Select-Ergebnis zum späteren Anzeigen "geschoben" wird?

Danke nochmals  :D

Lachtaube

#3
Hi,

eine WHERE-Klausel wirkt wie ein Filter, wobei dieser vor der Rückgabe der Daten angewendet wird.
Eine HAVING-Klausel filtert Daten (io.d.R. einer Gruppe) nachdem diese zusammengestellt sind, was i.d.R. nur bei Aggregat-Funktionen sinnvoll ist (z.B. zeige die Datensätze, deren Summe größer 500 ist).

Deine Bedingung kann nicht greifen, denn wenn Count(irgendwas) = 0 ist, gibt es auch keinen entsprechenden Datensatz für die Gruppe. HAVING JaNeinFeld = False würde funktionieren, ist aber aus den oben geschilderten Gründen langsamer, weil mehr Daten transferiert werden müssen (auch die Daten mit True) und vmtl. auch kein Index im Ja/Nein-Feld (falls es ihn denn gibt) genutzt wird.

Text hinter AS stellt Alias-Namen dar, der einem Feld oder Ausdruck bzw. einer Datenquelle einen neuen (oft kürzeren) Namen zuweist. Es ist guter Stil, keine Sonder- und Leerzeichen , sowie führende Ziffern in Feld- und Tabellennamen (und auch alias-Namen) zu verwenden. In Access-Tabellen und gespeicherten Abfragen können Felder über die Eigenschaft Beschriftung individuell mit einer Überschrift ausgestattet werden, die diese Einschränkung nicht aufweist. Die Beschriftung wird bei der Anzeige von Tabellen und Abfragen in der Datenblatt ansicht als Überschrift verwendet und von Assistenten bei der Erstellung von Formularen und Berichten genutzt.
Grüße von der (⌒▽⌒)