Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL Summen berechnen (https://www.delphipraxis.net/176095-mysql-summen-berechnen.html)

handson 12. Aug 2013 12:14

Datenbank: MySQL • Version: 5.0 • Zugriff über: MicroOLAP DAC

MySQL Summen berechnen
 
Hallo!

Ich habe ein Problem mit einer MySQL-Abfrage.

Felder der Tabelle:

- Kundennummer
- Datum
- Summe

Diese Tabelle eine Übersicht der Kundenrechnungen. Jede Rechnung und Gutschrift wird in Kurzform darin gespeichert. Rechnungen positiv, Gutschriften negativ.

Wie bekomme ich eine SQL-Abfrage mit den folgenden Feldern:

Kundennr. Summe positiver Werte Summe negativerer Werte Summe aus positiv + negativ

Abfrage wird nach Kundennr. gruppiert.

Ich habe schon diverse JOINs ausprobiert, aber irgendwie komme ich nicht an meinem gewünschten Ergebnis ran. Bin mir auch nicht sicher, ob das überhaupt funktioniert.
Hat jemand vielleicht eine Idee?

Stephan

Bernhard Geyer 12. Aug 2013 12:23

AW: MySQL Summen berechnen
 
Und was hast du bisher?

Ich würde sagen durch brauchst 2 select count... und 1 Union-Abfrage.
Sowas in der Art:

Zitat:

1, select sum(<feld>) from <tabelle where <feld> > 0

2, select sum(<feld>) from <tabelle where <feld> < 0

3, select <feld1>, ...<summenfeld> as "Einnahmen", '' as "Ausgaben" from <1> union select <feld1>, ..."" as "Einnahmen", <summenfeld> as "Ausgaben" from <2>

df3cb 12. Aug 2013 12:30

AW: MySQL Summen berechnen
 
Ich würde auch ein UNION empfehlen:

SELECT kundennummer, SUM(summe) AS summe_rechnung, 0 AS summe_gutschrift
FROM kundentabelle
WHERE summe > 0
GROUP BY kundennummer
UNION
SELECT kundennummer, 0 AS summe_rechnung, SUM(summe) AS summe_gutschrift
FROM kundentabelle
WHERE summe < 0
GROUP BY kundennummer
ORDER BY kundennummer

Olli73 12. Aug 2013 12:35

AW: MySQL Summen berechnen
 
Ungefähr so (ungetestet):
Code:
select
  kundennummer,
  sum(case when summe < 0 then 0 else summe end case) as positiv,
  sum(case when summe > 0 then 0 else summe end case) as negativ,
  sum(summe) as gesamt
from
  tabelle
group by
  kundennummer

handson 12. Aug 2013 12:38

AW: MySQL Summen berechnen
 
Wenn ich das mit einer UNION mache, erscheint folgendes Ergebnis:

"kundnr" "summe_rechnung" "summe_gutschrift"
"00005966" "1073,67" "0,00"
"00005966" "0,00" "-83,46"


Ich möchte das gerne in einer Zeile haben, und dass man eine extra Spalte hat, die mit den Summen rechnet, z.B. eine Prozentsatz ausrechnet oder die Gesamtsumme ausgibt.

Somit wird die Sache kniffliger...

Stephan

p80286 12. Aug 2013 12:59

AW: MySQL Summen berechnen
 
Wie wäre es hiermit?
Code:
select Kundennummer,Rechnung,Gutschrift,Rechnung-Gutschrift "Differenz".....
from
(
select Kundennummer,sum(Rechnung) as Rechnung, sum(Gutschrift) as Gutschrift,rechnung-Gutschrift "Differenz".....
from (bisherige Abfrage)
group by Kundennummer
)
Gruß
K-H

handson 12. Aug 2013 13:01

AW: MySQL Summen berechnen
 
@Olli73:

Mit der Case Anweisung hat es leider nicht geklappt. Habe das mal mit IF ausgetauscht und jetzt funktioniert es so wie ich es haben möchte. Danke dafür.

Code:
select kundnr, sum(if(gesamt<0,0,gesamt)) as positiv,
               sum(if(gesamt>=0,0,gesamt)) as negativ,
               sum(gesamt) as gesamt,
               ((sum(if(gesamt>=0,0,gesamt))*-1) * 100 / 
                                          sum(if(gesamt<0,0,gesamt))) as anteil
                                          from kundenrechnungen
  where mandantenid = '000'
  group by kundnr;
Was etwas unschön ist, dass man mit diesen langen SUM-Funktionen auch rechnen muss. Mit dem Namen, den man vorher der Spalte zugewiesen hat (positiv, negativ) geht es leider nicht.
Gibt dafür eine Alternativ, eine quasi Variable, mit der man auch rechnen kann?

Stephan

Olli73 12. Aug 2013 13:18

AW: MySQL Summen berechnen
 
Zitat:

Zitat von handson (Beitrag 1224453)
Mit der Case Anweisung hat es leider nicht geklappt. Habe das mal mit IF ausgetauscht und jetzt funktioniert es so wie ich es haben möchte. Danke dafür.

Kenne mich mit MySQL nicht aus, aber gut, dass es mit IF klappt.

Zitat:

Zitat von handson (Beitrag 1224453)
Was etwas unschön ist, dass man mit diesen langen SUM-Funktionen auch rechnen muss. Mit dem Namen, den man vorher der Spalte zugewiesen hat (positiv, negativ) geht es leider nicht.
Gibt dafür eine Alternativ, eine quasi Variable, mit der man auch rechnen kann?

Versuchs mal so (ähnlich) wie von p80286 vorgeschlagen:

Code:
select *, Rechnewas
from (bisherige Abfrage)
Deine bisherige Abfrage kannst du dabei gedanklich als Tabelle/View betrachten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz