0

Berechnung der Summe einer Spalte

Ich komme mit dem Befehl sum() nicht klar.

Ich bin dabei eine Lagerbewertung zu erstellen. Der Lagerwert ergibt sich als BESTAND * EINKAUFSPREIS, das ergibt ein Feld im Artikelstamm, genannt LAGERWERTERMITTLUNG ARTIKEL. In der Tabellenansicht kann ich mir die Summe über alle Artikel anzeigen lassen, soweit auch alles klar.

Nun wollte ich die Summe über eine Funktion ermitteln lassen und habe es mit sum(LAGERWERTERMITTLUNG ARTIKEL) versucht, das ergibt aber keine Summe, sondern immer nur den Lagerwert des Artikels, auf dem ich gerade stehe.

Auch eine Berechnung über eine Verknüpfung in einer anderen Tabelle (da wo ich die Auswertung machen will), ergab keinen Wert, hier kam immer Null raus. 

Kann mir jemand helfen und sagen, wie die Syntax lautet, wenn ich die Summe einer Spalte berechnen will?

38 Antworten

null
    • Peter_Humm
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Darf ich nochmal was fragen....  meine Datenbank sieht derzeit auszugsweise so aus.

    https://drive.google.com/open?id=199gISvxi9wMT9qiPrBCpkp1K7yI1GJCd

    Diese Formel

    let myDate := Datum;
    sum((select 'Motorrad')[Datum <= myDate].'Unterhalt Betrag')

    zeigt in der Spalte "Unterhalt Total Betrag" die jeweils aktuelle Summe aller Teilbeträge.

    Wenn ich die Daten alle am selben Tag eingebe, tritt ein Fehler auf, indem auf jeder Zeile der gleiche Totalbetrag steht. Was ich erwarte, ist aber in der Reihenfolge der Eingabe ein Total. Dies erreiche ich momentan, indem ich jeweils das Datum anpasse - sieht dann so aus. 

    https://drive.google.com/open?id=17_hT5civUl2GbT-5Mbds4iBrfU-V6T1l

    Wie erreiche ich das Gewünschte? - besten Dank schon mal....

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    sehe nicht ganz durch 😳, mach mal so:

    sum((select 'Motorrad' where Datum <= myDate).'Unterhalt Betrag)

    • Peter_Humm
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Leider negativ - hat nichts bewirkt

    Danke trotzdem für's Mitdenken

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    habe es gesehen...

    ist schon richtig, was die Spalte rechnet

    bei gleichem Datum muß auch der Betrag gleich sein...

    ich überlege...

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    ich denke, Du müßtest mit Datum + Zeit rechnen

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Moin, ich habe den Thread jetzt nicht komplett verfolgt, aber was spricht dagegen, die Nummer des aktuellen Datensatzes zur Berechnung des Saldos heranzuziehen? Bei einer chronologischen Erfassung der Daten hätte man ja auch immer die richtige Reihenfolge:

     

    let RecNo := number(Nr);
    sum((select Motorrad where number(Nr) <= RecNo).' Unterhalt Betrag')

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    oder so:

    ---

    let myDate:=Datum;

    let RecNo := number(Nr);

    sum((select 'Motorrad')[Datum < =myDate or if Datum=myDate then number(Nr)<=RecNo end ].'Unterhalt Betrag')

    ---

    Leo

    • bernd
    • vor 5 Jahren
    • Gemeldet - anzeigen

    das ist schon richtig, wenn man absolut die Ausgabenreihenfolge einhält. Wenn aber doch mal ein Quittung später auftaucht... Mit Datum und Zeit würde es gehen oder selbste eine laufende Nummer erstellen, die man gegebenenfalls ändern kann

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Leo, bist du sicher, dass deine Formel das Problem löst? Wenn(!) ich es richtig interpretiere, dann wird die or-if-Option im Falle desselben Datums ja erst gar nicht ausgeführt. Das Ergebnis wäre also dasselbe wie vorher (selber Tag - selber Saldo). Oder sehe ich das falsch?

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ja, da hast du Recht habe hier zu kurz gedacht:

    ---

    let myDate:=Datum;

    let RecNo := number(Nr);

    sum((select 'Motorrad')[Datum < myDate].'Unterhalt Betrag') + sum((select 'Motorrad')[Datum = myDate and number(Nr) <= RecNo].'Unterhalt Betrag')

    ---

     

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 5 Jahren
    • Gemeldet - anzeigen

    👍 Das sieht gut aus. War mir (wieder mal) so nicht eingefallen. Wenn man jetzt noch die richtige Reihenfolge innerhalb eines Datums sicherstellen will, bleibt wahrscheinlich wirklich nur die Erfassung mit Uhrzeit. Aber das ist wohl eine persönliche Entscheidung unter Abwägung von Aufwand und Nutzen.

    • Peter_Humm
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hey - ihr seid Spitze

    So langsam komme ich der Lösung näher. Der Code von Leonid ist nahezu perfekt. Nun habe ich aber meine Datensätze nach Datum geordnet, sodass der aktuelle immer oben steht. Das hat zur Folge, dass die ersten Einträge in der Datenbank jetzt die höchsten Nummern tragen. Das falsch sortierte Ergebnis sieht dann so aus. 

    https://drive.google.com/open?id=1dvtaUYzMsEDWGW_4rzvQAfl4NYp6UC-s

    Die Vergabe der Datensatznummer verläuft tatsächlich weder absolut noch streng chronologisch. Ab und zu fehlt auch mal eine Nummer. Beim Wechsel der Sortierreihenfolge ändert sich offenbar auch die Nummerierung.

    Die Tageszeit mit einzubeziehen scheidet aus, weil diese Angaben bei der Eingabe nicht erfasst wurden.

    • Peter_Humm
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Die simple Änderung auf ....number(Nr) >= RecNo..... also "grösser oder gleich" hat's nun definitiv gebracht. Ich bedanke mich für die zahlreichen Hiilfestellungen. 

Content aside

  • vor 5 JahrenZuletzt aktiv
  • 38Antworten
  • 14679Ansichten