Falsche Summenbildung

mglahn

Grünschnabel
Hi!

Bin gerade frisch im Board angekommen :-) *wave*

Ich hab da ein kleines Problemchen mit SQL und meine Bücher helfen mir irgendwie nicht weiter, daher suche ich nun im Netz nach Hilfe.

Folgende Problemstellung:

Ausgangssituation sind drei Tabellen. Die Verknüpfung ist recht eindeutig und wohl leicht zu verstehen (hoffe ich).

Tabelle1: Zahlung (Spalten: Betrag, Vorgang)
Tabelle 2: Haupttabelle (Spalten: Vorgang)
Tabelle 3: Forderung (Spalten: Betrag, Vorgang)

Die Tabellen sind 1:n über die Haupttabelle verbunden. D.h. dort kommt jeder Vorgang nur einmal vor. In den Tabellen Zahlung und Forderung durchaus öfter.


Problemstellung:
Per SQL-Script sollen in den Tabellen Zahlung und Forderung pro Vorgang eine Summe gebildet werden und das Ergebnis soll so aussehen, dass ich zu jedem Vorgang eine Summe Zahlungen und eine Summe Forderungen ausgeworfen bekomme.

Hier mein Statement:

SELECT SUM(FORDERUNG.BETRAG) AS SummeForderung, SUM(ZAHLUNG.BETRAG) AS SUMMEZAHLUNG, HAUPTTABELLE.AKTENZEICHEN
FROM FORDERUNG, ZAHLUNG, HAUPTTABELLE
WHERE FORDERUNG.VORGANG = HAUPTTABELLE.AKTENZEICHEN
AND ZAHLUNG.AKTENZEICHEN = HAUPTTABELLE.AKTENZEICHEN
and HAUPTTABELLE.BEDINGUNG1='irgendwas'
GROUP BY HAUPTTABELLE.AKTENZEICHEN

Im Grunde funktioniert das Statement so auch. :-)

Fälle bei denen jeweils EINE Forderung und nur EINE Zahlung existiert werden auch korrekt wiedergegeben.

Das Problem ist folgendes, wenn ich nun beispielsweise 2 Forderungen zu einem Vorgang habe wird die Forderung zwar korrekt aufsummiert, die entsprechende Zahlungssumme verdoppelt sich aber und andersrum. Habe ich drei Forderungen für einen Vorgang, so verdreifacht sich dadurch die Zahlungssumme. Mir leuchtet der Fehler soweit auch ein, nur weiss ich nicht, wie ich ihn beheben kann. Ich habe schon versucht, die beiden Summenbildungen als Sicht anzulegen und danach dann zusammenzubringen, aber das geht dann völlig in die Hose. Leider bin ich mit den JOIN-Operatoren noch nicht so vertraut und könnte mir vorstellen, dass man es darüber drehen kann....

Falls wer helfen kann,... ich wäre Euch echt dankbar! :-)

Grüsse
Mirko
 
Original geschrieben von mglahn
Mir leuchtet der Fehler soweit auch ein, nur weiss ich nicht, wie ich ihn beheben kann.
?
Wenn du weißt , woran's liegt, warum beseitigst du es dann nicht?

Sollen die Beträge denn jetzt aufsummiert werden, oder nicht?
- Willst du zu jedem Aktenzeichen nur einmal den Betrag wissen?
- Willst du zu jedem Aktenzeichen nur den höchsten Betrag wissen?
- oder was ?
 
Hallo,


so sollte es gehen:

SELECT SUM(distinct(FORDERUNG.BETRAG)) AS SummeForderung, SUM(distinct(ZAHLUNG.BETRAG)) AS SUMMEZAHLUNG, HAUPTTABELLE.AKTENZEICHEN
FROM FORDERUNG, ZAHLUNG, HAUPTTABELLE
WHERE FORDERUNG.VORGANG = HAUPTTABELLE.AKTENZEICHEN
AND ZAHLUNG.AKTENZEICHEN = HAUPTTABELLE.AKTENZEICHEN
and HAUPTTABELLE.BEDINGUNG1='irgendwas'
GROUP BY HAUPTTABELLE.AKTENZEICHEN
 
So, vor'm ins Bett gehen noch schnell einen Blick ins Board und hey :)

Danke für die schnellen Antworten.

@Gorcky
Ja, sagen wir es mal so, der Fehler den ich so produziere kapiere ich, aber einen Weg es abzustellen finde ich nicht ;)

Und sry, falls die Aufgabenstellung nicht so eindeutig war. Ja, am Ende brauche ich zu jedem Aktenzeichen eine entsprechende Summe der Zahlungen und eine der Forderungen.

@Movera
Werd ich morgen gleich mal ausprobieren! Vielen Dank schon mal. Ich meld mich hier dann nochmal

Gute Nacht
*gähn*
 
hm

Hallo,
ich bekomme bei diesem Code leider eine Fehlermeldung.
Meine Abfrage sieht so aus:
Code:
SELECT b.bm_nummer, b.baumassnahme, SUM( DISTINCT (

s.stunden
) ) AS summe_stunden, SUM( (
pos.betrag
) ) AS summe_betrag
FROM kst_stunden s, kst_baumassnahmen b, kst_rech_pos pos, kst_rechnungen r
WHERE b.BM_ID = s.BAUMASSNAHME AND b.BM_ID = r.BAUMASSNAHME AND r.R_ID = pos.R_ID
GROUP BY BAUMASSNAHME
ORDER BY `bm_nummer` ASC

Diese produziert folgende Fehlermeldung:
Code:
#1064 - You have an error in your SQL syntax near 'DISTINCT ( s.stunden ) )  AS summe_stunden, SUM( ( pos.betrag ) )  AS summe_betr' at line 1
Braucht man eine bestimmte SQL Version?

Habe so ein ähliches Problem hier beschrieben

Danke für eure Hilfe

Gruß Alex
 
Genau das ist mein Problem, Distinct funktioniert bei mir nicht im Zusammenhang mit SUM()

Du benutzt doch auch MySQL, oder?

Gruß Alex
 
Zurück