Benutzer mit den meisten Antworten
Abfangen von SQL count = empty

Frage
-
Hallo.
Ich suche schon lange nach einer lösung für mein Problem.
ich zähle die Anzahl von Werten innerhalb einer Kalenderwoche. Wenn aber keine Werte gefunden wurden. Schreibt er keine "0" sondern lässt die zeile Leer.
Meine aktuelle SQL abfrage lautet:
SELECT WKZ_KALENDERWOCHE, Count(*) AS pthb_anzahl FROM WKZ_Anfrage WHERE WKZ_VORLAUF>240 AND WKZ_ABTEILUNG='PCPT' AND WKZ_BEARBEITUNG ='HART' GROUP BY WKZ_KALENDERWOCHE
Wie muss ich mein Befehl anpassen
==>> Ich arbeite mit Acces2007!!!
Antworten
-
Hallo,
das dürfte Stefan auch erkannt haben .
Unabhängig vom COUNT() gilt in SQL: Wenn es keine Zeilen gibt, auf die die Kriterien zutreffen, so gibt es ein leeres Ergebnis.
Dann gibt es keine WKZ_KALENDERWOCHE auf die Kriterien zutreffen und somit auch keine Anzahl.
Willst Du Kalenderwochen mit 0 sehen, die keine Ergebnisse haben, brauchst Du eine zusätzliche Quelle, die Dir die möglichen Kalenderwochen aufzählt. Das kann entweder eine eigene Tabelle oder aber eine zusätzliche Abfrage auf die Tabelle sein - wobei dabei die Kriterien so gewählt sein müssen, das sie ein Ergebnis liefern.
Eine Möglichkeit mit der einen Tabelle auszukommen wäre:
SELECT w1.WKZ_KALENDERWOCHE, w2.pthb_anzahl FROM (SELECT DISTINCT WKZ_KALENDERWOCHE FROM WKZ_Anfrage) AS w1 LEFT JOIN (SELECT WKZ_KALENDERWOCHE, Count(*) AS pthb_anzahl FROM WKZ_Anfrage WHERE WKZ_VORLAUF>240 AND WKZ_ABTEILUNG='PCPT' AND WKZ_BEARBEITUNG ='HART' GROUP BY WKZ_KALENDERWOCHE) AS W2 ON w1.WKZ_KALENDERWOCHE = w2.WKZ_KALENDERWOCHE;
Zulässig wären Kriterien für den ersten Teil (wie z. B. die Abteilung), solange dabei noch was bei herauskommt.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Donnerstag, 7. März 2013 13:39 Korrektur Abfrage
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 27. März 2013 22:33
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 3. Februar 2015 15:37
-
Ähm,
das mit Access 2007 hatte ich (und Elmar wohl auch :) übersehen.
Da solltest Du dir in Access eine Abfrage (Name wäre hier angenommen: "Kalenderwochen") erstellen, die dann vom SQL Statement her aussieht:
SELECT DISTINCT WKZ_KALENDERWOCHE FROM WKZ_Anfrage
Die eigentliche Abfrage sieht dann so aus:
SELECT kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE, COUNT( 1 ) AS pthb_anzahl FROM Kalenderwochen kw LEFT JOIN WKZ_Anfrage an ON kw.KALENDERWOCHE = anf.WKZ_KALENDERWOCHE WHERE anf.WKZ_VORLAUF > 240 AND anf.WKZ_ABTEILUNG = 'PCPT' AND anf.WKZ_BEARBEITUNG = 'HART' GROUP BY kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Donnerstag, 7. März 2013 12:03
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 27. März 2013 22:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 3. Februar 2015 15:38
Alle Antworten
-
Hi,
Count ist nicht empty, 0 oder was anderes. Es gibt einfach keine Zeilen für diese WKZ_KALENDERWOCHE.
Wenn Du in einer anderen Tabelle alle möglichen Kalenderwochen hast, musst Du diese als Grundlage für die Abfrage nehmen und sie bspw. mit einem LEFT JOIN mit der WKZ_Anfrage Tabelle verbinden.
SELECT kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE, COUNT( 1 ) AS pthb_anzahl FROM KALENDERWOCHEN kw LEFT JOIN WKZ_Anfrage an ON kw.KALENDERWOCHE = anf.WKZ_KALENDERWOCHE WHERE anf.WKZ_VORLAUF > 240 AND anf.WKZ_ABTEILUNG = 'PCPT' AND anf.WKZ_BEARBEITUNG = 'HART' GROUP BY kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE
So in etwa könnte das aussehen. Das ist natürlich nur ein Beispiel und könnte noch Fehler beinhalten. Den Weg sollte es aber zeigen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo,
das dürfte Stefan auch erkannt haben .
Unabhängig vom COUNT() gilt in SQL: Wenn es keine Zeilen gibt, auf die die Kriterien zutreffen, so gibt es ein leeres Ergebnis.
Dann gibt es keine WKZ_KALENDERWOCHE auf die Kriterien zutreffen und somit auch keine Anzahl.
Willst Du Kalenderwochen mit 0 sehen, die keine Ergebnisse haben, brauchst Du eine zusätzliche Quelle, die Dir die möglichen Kalenderwochen aufzählt. Das kann entweder eine eigene Tabelle oder aber eine zusätzliche Abfrage auf die Tabelle sein - wobei dabei die Kriterien so gewählt sein müssen, das sie ein Ergebnis liefern.
Eine Möglichkeit mit der einen Tabelle auszukommen wäre:
SELECT w1.WKZ_KALENDERWOCHE, w2.pthb_anzahl FROM (SELECT DISTINCT WKZ_KALENDERWOCHE FROM WKZ_Anfrage) AS w1 LEFT JOIN (SELECT WKZ_KALENDERWOCHE, Count(*) AS pthb_anzahl FROM WKZ_Anfrage WHERE WKZ_VORLAUF>240 AND WKZ_ABTEILUNG='PCPT' AND WKZ_BEARBEITUNG ='HART' GROUP BY WKZ_KALENDERWOCHE) AS W2 ON w1.WKZ_KALENDERWOCHE = w2.WKZ_KALENDERWOCHE;
Zulässig wären Kriterien für den ersten Teil (wie z. B. die Abteilung), solange dabei noch was bei herauskommt.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Donnerstag, 7. März 2013 13:39 Korrektur Abfrage
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 27. März 2013 22:33
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 3. Februar 2015 15:37
-
Hi,
dann gibt es wohl keine WKZ_KALENDERWOCHE, die mit der WHERE Klausel ermittelt werden kann.
Falls Du alle eindeutigen WKZ_KALENDERWOCHE aus der Tabelle und dazu dann die Anzahl anhand der WHERE Klausel ermitteln willst, geht das ggfs. auch so:
WITH Query AS ( SELECT DISTINCT WKZ_KALENDERWOCHE FROM WKZ_Anfrage ) SELECT kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE, COUNT( 1 ) AS pthb_anzahl FROM Query kw LEFT JOIN WKZ_Anfrage an ON kw.KALENDERWOCHE = anf.WKZ_KALENDERWOCHE WHERE anf.WKZ_VORLAUF > 240 AND anf.WKZ_ABTEILUNG = 'PCPT' AND anf.WKZ_BEARBEITUNG = 'HART' GROUP BY kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo,
das dürfte Stefan auch erkannt haben .
Unabhängig vom COUNT() gilt in SQL: Wenn es keine Zeilen gibt, auf die die Kriterien zutreffen, so gibt es ein leeres Ergebnis.
Dann gibt es keine WKZ_KALENDERWOCHE auf die Kriterien zutreffen und somit auch keine Anzahl.
Willst Du Kalenderwochen mit 0 sehen, die keine Ergebnisse haben, brauchst Du eine zusätzliche Quelle, die Dir die möglichen Kalenderwochen aufzählt. Das kann entweder eine eigene Tabelle oder aber eine zusätzliche Abfrage auf die Tabelle sein - wobei dabei die Kriterien so gewählt sein müssen, das sie ein Ergebnis liefern.
Eine Möglichkeit mit der einen Tabelle auszukommen wäre:
SELECT w1.WKZ_KALENDERWOCHE, w2.pthb_anzahl FROM (SELECT DISTINCT WKZ_KALENDERWOCHE FROM WKZ_Anfrage) AS w1 LEFT JOIN (SELECT w1.WKZ_KALENDERWOCHE, Count(*) AS pthb_anzahl FROM WKZ_Anfrage WHERE WKZ_VORLAUF>240 AND WKZ_ABTEILUNG='PCPT' AND WKZ_BEARBEITUNG ='HART' GROUP BY WKZ_KALENDERWOCHE) AS W2 ON w1.WKZ_KALENDERWOCHE = w2.WKZ_KALENDERWOCHE;
Zulässig wären Kriterien für den ersten Teil (wie z. B. die Abteilung), solange dabei noch was bei herauskommt.
Gruß Elmar
-
Ähm,
das mit Access 2007 hatte ich (und Elmar wohl auch :) übersehen.
Da solltest Du dir in Access eine Abfrage (Name wäre hier angenommen: "Kalenderwochen") erstellen, die dann vom SQL Statement her aussieht:
SELECT DISTINCT WKZ_KALENDERWOCHE FROM WKZ_Anfrage
Die eigentliche Abfrage sieht dann so aus:
SELECT kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE, COUNT( 1 ) AS pthb_anzahl FROM Kalenderwochen kw LEFT JOIN WKZ_Anfrage an ON kw.KALENDERWOCHE = anf.WKZ_KALENDERWOCHE WHERE anf.WKZ_VORLAUF > 240 AND anf.WKZ_ABTEILUNG = 'PCPT' AND anf.WKZ_BEARBEITUNG = 'HART' GROUP BY kw.KALENDERWOCHE, anf.WKZ_KALENDERWOCHE
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Donnerstag, 7. März 2013 12:03
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 27. März 2013 22:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 3. Februar 2015 15:38
-
Hallo,
Access hat die Angewohnheit alles, was es nicht (er)kennt als Parameter zu interpretieren. Welchen Parameter möchte er denn?
Ich hatte im zweiten Teil aus Versehen das W1 in w1.WKZ_KALENDERWOCHE kopiert, entferne den Alias bitte - im ersten Beitrag habe ich es abgeändert.
Wir haben Deine Tabelle / Abfragen hier nicht, und so ist ein wenig Mitarbeit auf Deiner Seite unerlässlich.
Gruß Elmar
@Stefan: Verschachtelte Abfragen kann Access schon.
-
Hallo Elmar,
@Stefan: Verschachtelte Abfragen kann Access schon.
ah, Ok. Da hab ich Access wohl doch unterschätzt. Danke für die Info.
Nur schade, dass CTEs nicht funktionieren, dann wäre es noch einfacher :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community