SUM mit 2 LEFT JOINs ...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SUM mit 2 LEFT JOINs ...

    Hi!
    Ich bin gerade dabei im Rahmen meiner Ausbildung ein kleines Haushaltsprogramm zu coden (Allerdings in Delphi mit Hilfe der BDE. Hoffe das macht nix!).
    Ich habe 3 Tabellen (Paradox 7): kategorien (id, name, buchungsart -> ein oder ausgang), kostenstellen (id, name, schlüsselnr.) und buchungen (id, datum, grund, x -> nur als platzhalter für eigene Schlüssel, kategorie, kostenstelle).
    Nun habe ich folgende Abfrage und bekommen dauernd einen Fehler:
    Code:
    SELECT buchungen.Datum, buchungen.Grund, buchungen.X, kostenstellen.Name AS Kostenstelle, 
    kategorien.Name AS Kategorie, buchungen.Betrag, SUM(buchungen.Betrag) AS Saldo 
    FROM buchungen LEFT JOIN kostenstellen ON (buchungen.kostenstelle=kostenstellen.id) 
    LEFT JOIN kategorien ON (buchungen.Kategorie=kategorien.Id) 
    GROUP BY buchungen.Id ORDER BY buchungen.Datum
    Fehlermeldung:
    Wenn ein GROUP BY existiert, muß sich jedes einfache Feld in den
    Projektoren im GROUP BY befinden.
    Was mach ich falsch? Hab schon in ein paar Tutorials geschaut und im Forum gesucht.

    Dann noch eine Frage:
    Das SUM(buchungen.Betrag) ist zwar ganz nett aber schöner wäre es, wenn man die Abfrage so gestalten könnte, dass immer der Betrag von der vorherigen Buchung vom aktuellen Saldo abgezogen bzw. addiert wird, um für jedes Datum den aktuellen Saldo zu bekommen. Geht sowas?

  • #2
    Die Fehlermeldung sagt doch schon alles jedes nicht aggregierte FEld muss in das Group...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Da ist halt das Problem der Pisa-Kinder ...
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        Original geschrieben von MelloPie
        Die Fehlermeldung sagt doch schon alles jedes nicht aggregierte FEld muss in das Group...
        Ähm, ja... und was heißt das für einen Datenbank-Newbie? Ein Link zu einem passenden Tutorial würde mir auch schon helfen, falls das jetzt den Rahmen sprengt.

        @Goth: Irgendwann hast du bestimmt auch mal angefangen oder warst du schon immer so klugscheißerig!? (nicht persönlich nehmen)

        Kommentar


        • #5
          Klugscheißerig war ich noch nie ... Klug schon immer ... seit ich 5 bin kann ich lesen ... und den Sinn der Worte die ich lese inhaltlich erfassen ...

          Genau das ist aber da Problem der PISA Kinder ... !

          Und wenn ich die Fehlermeldung lese die Du gepostet hast:

          Wenn ein GROUP BY existiert, muß sich jedes einfache Feld in den Projektoren im GROUP BY befinden.
          Frage ich mich warum Du der Sinn nicht erfassen konntest ... ?!?!?!?!
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            ist schon ok, goth..

            Darklord, wo hast du die fehlermeldung her ?
            meine Projekte bestaunen: http://www.kleiza.de

            Kommentar


            • #7
              @Goth:
              Ich kann ja den Sinn erfassen! Man kann nicht Aggregatfelder zusammen mit normalen Felder abfragen ohne das richtig zu gruppieren - logisch. Ich kann nur noch zu wenig SQL, um das richtig in eine Abfrage zu verfassen. In alle Tutorials, die ich bisher gelesen habe, sind das nur ganz einfache Beispiele mit denen ich da nicht viel anfangen kann.
              Also wenn du so schlau und erleuchtet bist, warum gibtst du nicht 'ne Hilfestellung bzw. einen Tipp!?

              @Campus: Aus der Delphi 7 IDE.

              Kommentar


              • #8
                sag doch mal was du genau haben willst
                meine Projekte bestaunen: http://www.kleiza.de

                Kommentar


                • #9
                  Es sollen alle Buchungen sortiert nach Datum mit Buchungsgrund, Kategorie, Kostenstelle und Betrag angezeigt werden. Als letztes Feld jeder Zeile hätte ich noch gern den Saldo zum entsprechenden Datum, also die Summe der Beträge bis zu diesem Datum. Wenn das mit einer Abfrage nicht so einfach hinhaut halt nur die Summe aller Beträge (was ich ja da in SQL schon probiert habe).
                  Mir würde wie gesagt auch schon ein Tipp bzw. ein gutes Tutorial reichen.

                  Kommentar


                  • #10
                    Ich hab mal die einzelnen Felder fett gemacht. Bei einer Aggregation wie zB SUM() usst Du alle Eizelnen Felder gruppieren


                    SELECT
                    buchungen.Datum,
                    buchungen.Grund,
                    buchungen.X,
                    kostenstellen.Name AS Kostenstelle,
                    kategorien.Name AS Kategorie,
                    buchungen.Betrag,

                    SUM(buchungen.Betrag) AS Saldo
                    FROM buchungen LEFT JOIN kostenstellen ON (buchungen.kostenstelle=kostenstellen.id)
                    LEFT JOIN kategorien ON (buchungen.Kategorie=kategorien.Id)
                    GROUP BY buchungen.Id
                    ,buchungen.Grund,
                    buchungen.X,
                    Kostenstelle,
                    Kategorie,
                    buchungen.Betrag

                    ORDER BY buchungen.Datum
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      Danke für die Hilfe! So langsam verstehe ich das mit dem GROUP BY besser. Naja, in 2 Monaten haben wir hier erstmal 'ne SQL-Schulung. Dann wird alles gut! Werd mir glaube ich auch nochmal ein Buch für Datenbankprogrammierung zulegen.

                      Grüße Tim

                      Kommentar


                      • #12
                        Hm, also irgendwie funktioniert das immer noch nicht! Da kommt noch der selbe Fehler. Ich habe auch noch das Feld buchungen.Datum mit gruppiert und trotzdem nicht. Was muss da noch rein damit das hinhaut? Da sind doch schon alle Felder drin. Oder müssen die Felder aus den Tabellen kostenstellen und kategorien auch mit rein?

                        Kommentar

                        Lädt...
                        X