Sybase Abfrageproblem

thardy

Neuer Benutzer
Beiträge
3
Ich will aus einer Belegtabelle die Umsatzsumme nach Kunden gruppiert bekommen. In der Tabelle gibt es Belege für Rechnungen und Gutschriften, für den Umsatz muss ich die Summe der Gutschriften von der Summe der Rechnungen abziehen.
Ich beschreibe mal stark vereinfacht, was ich genau mache bzw. machen will.
Die Summe der Rechnungen pro Kunde bekomme ich mit:

SELECT Belege.Kunde , SUM(Belege.Betrag) AS Rechnungssumme FROM Belege WHERE Belege.Typ='RECHNUNG' GROUP BY Belege.Kunde

Die Gutschriften ganz ähnlich:

SELECT Belege.Kunde , SUM(Belege.Betrag) AS Rechnungssumme FROM Belege WHERE Belege.Typ='GUTSCHRIFT' GROUP BY Belege.Kunde

Jetzt hab ich mir gedacht um das in einem Rutsch zu machen könnte ich so vorgehen:

SELECT Beleg.Kunde , SUM(Belege.Betrag) - (SELECT SUM(Belege.Betrag) FROM Belege WHERE Belege.Typ='GUTSCHRIFT') FROM Belege WHERE Belege.Typ='Rechnung' GROUP BY Belege.Kunde

Was aber natürlich nicht das richtige Ergebnis bringt, da in dem SubSelect ja keine Beziehung zu dem gerade abgefragten Kunden besteht. Wie macht man sowas?

Ich arbeite mit einer Sybase Adaptive Server DB, was aber keine große Rolle spielen sollte, ist wohl mehr ein SQL- bzw. Logikproblem.

Danke fürs Lesen!
Gruß Thomas
 
Werbung:
Ok, nachdem ich es mal niedergeschrieben hatte, war es irgendwie klar:

SELECT Beleg.Kunde AS Knr , SUM(Belege.Betrag) - (SELECT SUM(Belege.Betrag) FROM Belege WHERE Belege.Typ='GUTSCHRIFT' AND Belege.Kunde=Knr) FROM Belege WHERE Belege.Typ='Rechnung' GROUP BY Knr
 
SELECT Belege.Kunde , SUM(Belege.Betrag) AS Rechnungssumme FROM Belege WHERE Belege.Typ='RECHNUNG' GROUP BY Belege.Kunde

Die Gutschriften ganz ähnlich:

SELECT Belege.Kunde , SUM(Belege.Betrag) AS Rechnungssumme FROM Belege WHERE Belege.Typ='GUTSCHRIFT' GROUP BY Belege.Kunde

Jetzt hab ich mir gedacht um das in einem Rutsch zu machen könnte ich so vorgehen:

Du kannst da sicher mit CASE WHEN arbeiten, also z.B. sum(case when typ='gutschrift' then betrag else 0 end) as sum_gutschrift, sum(case when type='rechnung' then betrag else 0 end) as sum_rechnung ... das kannst auch weiter verwurschteln und das eine vom anderen abzuziehen oder auf mein Konto zu überweisen ...
 
Ja ich würde CASE auch favorisieren wenn es unterstützt wird.
Code:
SELECT    t.Kunde,
        sum(t.Betrag) AS Summe
FROM    (
SELECT    Belege.Kunde,
        (    CASE
            WHEN    Belege.Typ='GUTSCHRIFT'
            THEN    Belege.Betrag * -1
            ELSE    Belege.Betrag
            END ) AS Betrag
FROM    Belege
) t
GROUP BY t.Kunde
 
Werbung:
Danke für Eure Antworten!
Hier nochmal meine jetzige Lösung in "Schönschrift", nicht so anstrengend ;)

Code:
SELECT    Beleg.Kunde AS Knr,
        SUM(Belege.Betrag) - (
            SELECT    SUM(Belege.Betrag)
            FROM Belege
            WHERE Belege.Typ='GUTSCHRIFT' AND Belege.Kunde=Knr
         )
FROM    Belege
WHERE Belege.Typ='RECHNUNG'
GROUP BY Knr
 
Zurück
Oben