SQL Gruppierte Ergebnisse zählen (darstellen als einzelne Zahl)

Nebuk

Lieutenant
Registriert
Sep. 2009
Beiträge
901
Hallo zusammen

Ich bin auf der Suche nach einer Möglichkeit folgendes Problem zu lösen. Dabei suche ich am Ende eigentlich nur eine einzelne Zahl. Da ich schon länger kein SQL gemacht habe und ich damals auch nicht allzu gut darin war hoffe ich auf etwas Hilfe. :)

Für eine Auswertung muss ich herausfinden wie viele Kunden in der Datenbank gespeichert sind welche noch mindestens zwei oder mehr Rechnungen offen haben - also noch nicht bezahlt haben. Dabei steht mir ein Datumsfeld zur Verfügung auf dass ich prüfe ob es NULL ist (da noch kein Zahlungseingang registriert wurde ist es eben "leer"). Weiter suche ich in der Tabelle "Aufträge" nach den Kundennummern und zähle ob sie öfters als einmal in der DB vorkommen (eben öfters als 1x).

Quasi so (Pseudocode):

SELECT count(*) AS "Anz. Kunden mit >1 offenen Rg" FROM kunde WHERE zahlungseingang = null AND HAVING count(offeneRechnungen) > 1

Natürlich funktioniert das leider nicht so da - soviel ich weiss - Having Group By voraussetzt, es soll nur die Beschreibung etwas anders darstellen.

Für jeden Ratschlag oder Hilfestellung bin ich mehr als nur dankbar.

Schönen Abend
Gruss
Nebuk
 
Ich verstehe noch nicht ganz wie deine Tabelle(n) aussehen, aber um eine Rechnung einem Kunden zuordnen zu können muss ja ein Fremdschlüssel zu den Kundendaten vorhanden sein.

Ich gehe also mal davon aus, dass die Rechnungstabelle die Spalten KundenID und Zahlungseingang besitzt.
Dann müsstest du eigentlich folgendes tun können:

Code:
SELECT   Count(a.KundenID)
FROM
(
SELECT    KundenID,
          COUNT(*) AS 'Anzahl offene Rechnungen'
FROM      Rechnungstabelle
WHERE     Zahlungseingang IS NULL
GROUP BY  KundenID
HAVING    COUNT(*) > 1
) AS a

So?
 
Zuletzt bearbeitet:
Natürlich funktioniert das leider nicht so da - soviel ich weiss - Having Group By voraussetzt, es soll nur die Beschreibung etwas anders darstellen.

Zum Verständnis: Having bezieht sich immer auf eine Aggregatsfunktion und macht, wie du schon sagtest, nur Sinn bei einer Gruppierung. Du filterst also deine Summe, Anzahl, etc. nachdem du deine Daten gruppiert hast.
 
Danke für die Antworten. Mit der Hilfe von HenMac10 konnte ich die Abfrage erstellen und habe das gewünschte Resultat erhalten. Im Grunde hatte ich die Abfrage komplett fertig, aber habe diese eben nicht in eine Klammer gesetzt und diese dann einfach gezählt (Zeile 1-3 + 10). Die Abfragen in ein Subselect zu packen hatte ich ebenfalls schon mal getestet, jedoch schlug bei mir die Abfrage fehl, weil ich die letzte Zeile nicht geschrieben hatte (AS a). Deshalb habe ich dann andere Ansätze weiterverfolgt und bin wie ihr lesen konntet nicht zum Ziel gekommen.

@DanielBm: Das macht durchaus Sinn alles erst zu gruppieren und danach zu zählen/berechnen. :)

Jedenfalls danke nochmals für die Antworten und fürs Lösen des Problems. Ich werde mich bestimmt nochmals betreffend SQL melden, da ich noch vieles (wieder) lernen darf :D
 
Zurück
Oben