Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfrageproblem

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von thardy, 27 November 2013.

  1. thardy

    thardy Neuer Benutzer

    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
     
  2. thardy

    thardy Neuer Benutzer

    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
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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 ...
     
  4. ukulele

    ukulele Datenbank-Guru

    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
     
  5. thardy

    thardy Neuer Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden