Ich brauche Hilfe mit der SUM-Funktion. Ich versuche, die Rechnungsbeträge für das gleiche Konto zu einer Gesamtsumme zu SUMMEN, aber die Ergebnisse, die ich bekomme, zeigen meine SUM-Spalte einfach multipliziert meine erste Spalte mit 3.
Hier ist, was ich als Ergebnisse für meine Scheindaten will:
%Vor%Abfrage:
%Vor%ODER
%Vor%Ich würde es vorziehen, beide Ergebnisse wenn möglich zu haben.
Hier ist was ich bekomme:
Meine SUM-Spalte multipliziert nur mit drei Werten. Sie summiert die Daten nicht anhand der Kontonummer.
%Vor%Danke für Ihre Antworten. Es stellte sich heraus, dass mein Problem ein Datenbankproblem mit doppelten Einträgen war, nicht mit meiner Logik. Eine schnelle Tabellensynchronisation und die SUM Funktion funktionierten wie erwartet. Dies alles ist immer noch nützliches Wissen für die SUMME-Funktion und ist lesenswert, wenn Sie Probleme haben, es zu benutzen.
Wenn Sie Ihr Ergebnis nicht gruppieren möchten, verwenden Sie eine Fensterfunktion.
Sie haben Ihr DBMS nicht angegeben, aber dies ist ANSI SQL:
%Vor%Hier ist ein SQLFiddle: Ссылка
Sie können sogar eine laufende Summe hinzufügen, indem Sie Folgendes hinzufügen:
%Vor%gibt Ihnen die Summe bis zum aktuellen Zeilendatum.
Sie gruppieren mit BillDate
, aber die Rechnungsdaten unterscheiden sich für jedes Konto, sodass Ihre Zeilen nicht gruppiert werden. Wenn Sie darüber nachdenken, macht das nicht einmal Sinn - sie sind unterschiedliche Rechnungen und haben unterschiedliche Daten. Das gleiche gilt für Bill
- Sie versuchen Rechnungen für ein Konto zusammenzufassen, warum würden Sie danach gruppieren?
Wenn Sie BillDate
und Bill
von den Klauseln select und group by belassen, erhalten Sie die korrekten Ergebnisse.
Sie sollten nach dem Feld gruppieren, für das die SUM gelten soll, und nicht in SELECT irgendein Feld außer mehreren Zeilenwerten wie COUNT, SUM, AVE, etc., wenn Sie Bill-Feld wie in diesem Fall nur einschließen Der erste Wert in der Reihe der Zeilen wird angezeigt, was fast bedeutungslos und verwirrend ist.
Dies wird die Summe der Rechnungen pro Kontonummer zurückgeben:
%Vor%Sie können nach Bedarf weitere Klauseln wie WHERE, ORDER BY usw. hinzufügen.
Ich habe das versucht, aber die Abfrage wird nicht ausgeführt und sagt mir, dass mein Feld in der SELECT-Anweisung ungültig ist, weil es weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. Es zwingt mich, es dort zu behalten. Gibt es einen Weg dazu?
Sie müssen einen Self-Join durchführen. Sie können nicht aggregierte Daten in derselben Unterabfrage nicht zusammenfassen und beibehalten. ZB
%Vor%Ich muss Zeilen R1 und R2 Zeilen. Ich möchte nur zwei Zeilen hinzufügen (1074 und 649)
Anzahl der Titel 1074 649
%Vor%