Announcement

Collapse
No announcement yet.

Saldo berechnen ohne vieler SubSelects

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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.
    Zuletzt editiert von hausl78; 08.09.2016, 15:31.

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

    [highlight=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)
    [/highlight]

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

    Comment


    • #3
      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
          )

      Comment


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

        [highlight=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)
        [/highlight]

        Comment


        • #5
          Ja funktioniert, danke sehr!

          Comment

          Working...
          X