Hallo nochmal!
Ich kämpfe immer noch mit meinen
SQL-Statements. Da die letzte Frage hier im Forum so erfolgreich war, versuche ich es nochmal mit einer Erweiterung.
Hintergrund: Ich habe einen Kundenrechnungstabelle, wo kurze Informationen zu einer Rechnung bzw. Gutschrift gespeichert werden. Rechnungen haben einen positiven Rechnungsbetrag, Gutschrifen einen negativen. Durch die Funktionen SUM und IF bekomme ich heraus, welches die Rechnungen und welches die Gutschriften sind. Dadurch kann ich den prozentualen Anteil der Gutschriften errechnen.
Soweit so gut. Jetzt möchte ich wissen wie viele Kunden in einem bestimmten Anteil enthalten sind.
Die Liste der Kunden bekomme ich mit dem folgenden Script raus:
Code:
SELECT kundnr FROM kundenrechnungen
WHERE mandantenid = '000'
GROUP BY kundnr
HAVING ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) >= 10 AND
((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) <= 19.99:
Mit meiner Tabelle bekomme hierfür eine Liste von 17216 Einträg heraus.
Ich möchte statt der Liste nur einmal die Zahl 17216 stehen haben
Mein Versuch mit diesem Script hier:
Code:
SELECT COUNT(*) FROM kunden
WHERE mandantenid = '000' AND
kundnr IN (SELECT kundnr FROM kundenrechnungen
WHERE mandantenid = '000'
GROUP BY kundnr
HAVING ((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) >= 10 AND
((SUM(IF(gesamt>=0,0,gesamt))*-1) * 100 / SUM((IF(gesamt<0,0,gesamt)))) <= 19.99);
Klappt leider nicht. Nach 5 min. Laufzeit habe ich es abgebrochen. Die Tabellen sind allerdings entsprechend voll: Kunden ca. 200000, Kundenrechnungen ca. 800000.
Ich frag mich, warum der dafür so lange braucht. Schlüssel sind angelegt.
Hat jemand vielleicht eine Idee? Vielleicht sehe ich den Wald vor lauter Bäumen nicht.
Stephan