AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL Summen berechnen
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Summen berechnen

Ein Thema von handson · begonnen am 12. Aug 2013 · letzter Beitrag vom 12. Aug 2013
Antwort Antwort
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

MySQL Summen berechnen

  Alt 12. Aug 2013, 13:14
Datenbank: MySQL • Version: 5.0 • Zugriff über: MicroOLAP DAC
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
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 13:23
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>
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
df3cb

Registriert seit: 17. Nov 2008
1 Beiträge
 
Delphi XE2 Professional
 
#3

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 13:30
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
Bernd
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#4

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 13:35
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
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#5

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 13:38
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
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 13:59
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#7

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 14:01
@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
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#8

AW: MySQL Summen berechnen

  Alt 12. Aug 2013, 14:18
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.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 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