Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 5 von 5
  1. #1
    Stammgast
    Registriert seit
    31.07.2010
    Beiträge
    113

    Standard Saldo berechnen ohne vieler SubSelects

    Hallo,

    ich habe hier eine SQLite DB in der es u.a. Buchungen von Einnahmen und Ausgaben gibt. Ob ein Betrag + oder - gerechnet wird ist erst ersichtlich durch die jeweilige Kategorie zu dem Konto das in der Buchung angesprochen wird. Nun möchte ich gerne in einer Query alle "Ein", alle "Aus" und den Saldo berechnen. Das funktioniert in der Form unten soweit, jedoch frage ich mich, ob das nicht auch ohne vieler SubSelects geht, vor allem die Berechnung der Differenz stört mich da ich die Werte zuerst eigentlich schon habe aber dann nochmals hole, ich glaub das geht besser, oder irre ich? Danke jedenfalls.

    Code:
    SELECT  
    
      (
        SELECT SUM(b.Value)
        FROM Bookings b
        INNER JOIN Categories c ON b.Category = c.GUID
        WHERE c.Flags = 1
      )
      AS Ein,
    
      ( 
        SELECT SUM(b.Value)
        FROM Bookings b
        INNER JOIN Categories c ON b.Category = c.GUID
        WHERE c.Flags = 0
      )
      AS Aus,
    
      ( 
        SELECT SUM(b.Value)
        FROM Bookings b
        INNER JOIN Categories c ON b.Category = c.GUID
        WHERE c.Flags = 1
      ) 
      -
      (
        SELECT SUM(b.Value)
        FROM Bookings b
        INNER JOIN Categories c ON b.Category = c.GUID
        WHERE c.Flags = 0
      )
      AS Saldo
    Ergibt derzeit als Ausgabe:

    Code:
    Ein  Aus  Saldo
    697  560  137

    Wenn ich es so versuche ...

    Code:
    SELECT  
    
      (
        SELECT SUM(b.Value)
        FROM Bookings b
        INNER JOIN Categories c ON b.Category = c.GUID
        WHERE c.Flags = 1
      )
      AS Ein,
    
      ( 
        SELECT SUM(b.Value)
        FROM Bookings b
        INNER JOIN Categories c ON b.Category = c.GUID
        WHERE c.Flags = 0
      )
      AS Aus,
    
      Ein - Aus AS Saldo
    ... gibts leider nur einen Fehler no such column: Ein


    EDIT: Hab nochmals nachgelesen, scheinbar kann man solche Aliase nicht wiederverwenden.
    Geändert von hausl78 (08.09.2016 um 16:31 Uhr)

  2. #2
    Stammgast
    Registriert seit
    21.09.2010
    Beiträge
    119

    Standard

    Hier ein Beispiel wie du dein SQL schreiben kannst. Die categories Tabelle habe ich mal weg gelassen.

    Code SQL:
    SELECT ein, aus, ein-aus AS saldo
    FROM (SELECT SUM(CASE WHEN flags=1 THEN VALUE ELSE 0 END) AS ein,
      SUM(CASE WHEN flags=0 THEN VALUE ELSE 0 END) AS aus
    FROM bookings)

    http://sqlfiddle.com/#!7/5dfc0/1/0

  3. #3
    Stammgast
    Registriert seit
    31.07.2010
    Beiträge
    113

    Standard

    Danke @FlexGer für den Ansatz. Leider hab ich das so nicht ganz hinbekommen. Ich habe nun einen anderen Weg gefunden, der mir schon um einiges besser gefällt, als mein ursprünglicher:

    Code:
    SELECT Ein, Aus, Ein - Aus AS Saldo
    FROM 
        (
            SELECT SUM (b.Value) AS Ein
            FROM Bookings b
            INNER JOIN Categories c ON b.Category = c.GUID
            WHERE c.Flags = 1
        ),
    
        (
            SELECT SUM (b.Value) AS Aus
            FROM Bookings b
            INNER JOIN Categories c ON b.Category = c.GUID
            WHERE c.Flags = 0
        )

  4. #4
    Stammgast
    Registriert seit
    21.09.2010
    Beiträge
    119

    Standard

    Gerne
    Anhand deinem SQL Code müsste es so funktionieren.

    Code SQL:
    SELECT ein, aus, ein - aus AS saldo
      FROM (SELECT SUM(CASE
                         WHEN c.flags = 1 THEN
                          b.VALUE
                         ELSE
                          0
                       END) AS ein,
                   SUM(CASE
                         WHEN c.flags = 0 THEN
                          b.VALUE
                         ELSE
                          0
                       END) AS aus
              FROM bookings b
              JOIN Categories c
                ON b.Category = c.GUID)

  5. #5
    Stammgast
    Registriert seit
    31.07.2010
    Beiträge
    113

    Standard

    Ja funktioniert, danke sehr!

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •