[MSSQL] COUNT Problem

soyo

Erfahrenes Mitglied
Mahlzeit ! :)

Ich habe hier eine recht einfach Abfrage. Trotzdem bekomme ich es nicht hin das er mir die Anzahl der Ergebnise(Gruppierungen) ausgibt. Ich arbeite mit MS SQL 2005.

Code:
SELECT s.Nummer, s.KasseSuchwort, s.Scheinart, slz.Ziffer, slz.ScheinNummer, p.Suchwort, p.Langtext, COUNT(*) AS anzahl FROM 
  dbo.Schein AS s INNER JOIN
  dbo.ScheinLZ AS slz
  ON s.Nummer = slz.ScheinNummer INNER JOIN
  dbo.Privatkasse AS p
  ON s.KasseSuchwort = p.Suchwort
 WHERE
  s.Scheinart = 8 AND
  slz.Ziffer = 132
 GROUP BY p.Suchwort

Ich will nach dem Suchwort gruppieren und die dort enthaltene Scheinzahl ausgeben. Wenn ich COUNT(*) und GROUP BY weg lasse, funktioniert es. So bald aber eines der beiden oder beide vorhanden sind, bekomm ich 0 Datensätze. Wo liegt mein Fehler?

EDIT: Hab mir mal die Fehlermeldung ausgeben lassen und ein Screenshot gemacht.





Gruß soyo
 

Anhänge

  • ccharp_error.JPG
    ccharp_error.JPG
    90 KB · Aufrufe: 143
Zuletzt bearbeitet:
Hallo soyo,

die Fehlermeldung besagt es eigentlich recht deutlich:

Du hast mehrere Spalten in deiner Abfrage in der SELECT-Klausel, die in der GROUP-BY-Klausel nicht vorkommen.
D.h. deine Aggregatfunktion COUNT(*) kann damit nicht sauber ausgeführt werden, da keine Gruppenbildung vorgenommen werden kann.

Kurzum: Füge die restlichen Spalten, die du selektierst noch der GROUP-BY-Klausel hinzu.
Nur glaub ich nicht, dass das die Ergebnisse liefert, die du möchtest. Syntaktisch wäre die Abfrage aber dann korrekt.

Versuch es mal damit in der SELECT-Klausel nur p.Suchwort und COUNT(*) drin zu lassen und am Ende das GROUP-BY so wie du es schon hast. Also etwa so:

SQL:
SELECT p.Suchwort, COUNT(*) AS anzahl 
  FROM ....
 GROUP BY p.Suchwort



Anmerkung am Rande: Andere RDBMS wie z.B. MySQL würden deine Abfrage sang und klanglos ausführen, allerdings käme es möglicherweise zu Seiteneffekten.

Markus
 
Ich benutze sonst auch MySQL und dort würde es so funktionieren. Jedoch soll ich ein kleines Tool für eine Software schreiben, welche MSSQL benutzt :mad:.

Wenn ich alle Tabellen in die GROUP-BY Funktion schreibe, funktioniert es .. anscheinend. Ich habe nämlich nur eine kleine Datenbank zum Testen.
 
Ja,

da du aber sagtest, dass du nur nach dem Suchwort gruppieren möchtest, ist die Angabe aller Spalten möglicherweise zu viel, da die DBMS dann ja jede Kombination von Werten der anderen Spalten zur Bildung neuer Gruppen heranzieht.
Wie auch immer, versuch nur die Spalten in der SELECT-Klausel zu haben, die du für deine Gruppenbildung benötigst.

Markus
 
Ich habe es jetzt so gelöst:

Code:
SELECT p.Suchwort, p.Langtext,  COUNT(*) AS anzahl 
 FROM 
  dbo.Schein AS s INNER JOIN
  dbo.ScheinLZ AS slz
  ON s.Nummer = slz.ScheinNummer INNER JOIN
  dbo.Privatkasse AS p
  ON s.KasseSuchwort = p.Suchwort
 WHERE
  s.Scheinart = 8 AND
  slz.Ziffer = 132
 GROUP BY p.Suchwort, p.Langtext

Da ich die Spalte Langtext für die Ausgabe benötige, habe ich es so gelöst. Beide Spalten sind einmalig in ihrem Inhalt, also sollten dort keine Probleme auftreten.
Irgendwie für mich keine schöne Lösung, aber anscheinend funktioniert es nicht anderes.

Danke für die Hilfe.

EDIT: Wie macht ihr das hier mit der Syntaxhervorhebnung für SQL-Code?

Gruß soyo
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück