1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

ACCESS Nebeneinanderliegende Felder aufsummieren

Discussion in 'Office-Programme' started by stephan2000, Sep 6, 2005.

Thread Status:
Not open for further replies.
  1. stephan2000

    stephan2000 Kbyte

    Ich möchte in Access 2000 Werte aufsummieren die in einer Abfrage nebeneinander stehen. Allerdings nicht in einem Bericht oder Formular sondern mit einer Abfrage. Also nicht einzelnes Feld auswählen und in eckigen Klammern mit dem „+“ Zeichen addieren. Da man, meines Wissens nach nur Werte aufsummieren kann die untereinander in einer Tabelle stehen, war meine Idee die Tabelle zu transponieren. In Excel geht so etwas, in Access habe ich das leider nicht finden können. Da da Problem wahrscheinlich jeder schon mal hatte denke ich es müsste eine ganz einfache Lösung dafür geben. Wer kann mir sagen wie ich es machen soll.
    Gruß
    Stephan
     
  2. snaggles

    snaggles Kbyte

    Ich hoffe, ich habe die Frage richtig verstanden....

    Gesetzt den Fall, Du hast eine Tabelle mit 6 Entitäten:

    Tabelle: Umsatztabelle
    artikelnummer
    monat,
    jahr,
    umsatz,
    einsatz,
    ertrag

    und möchtest die Summe der Entitäten Umsatz, Einsatz, Ertrag und benötigst die Gesamtsummen über alle Datensätze, kannst Du mit einer SQL-Abfrage dies so tun:

    SELECT
    sum(umsatz) as umsatz_gesamt,
    sum(einsatz) as einsatz_gesamt,
    sum(ertrag) as ertrag_gesamt
    FROM Umsatztabelle

    mit entsprechender WHERE - Klausel kannst Du natürlich genau auswählen, welche Artikel, Monate oder Jahre Du in der Summierung benötigst.
     
  3. stephan2000

    stephan2000 Kbyte

    Hi,
    daß was Du beschreibst ist zwar richtig, aber es ist das normale von oben nach unten aufsummieren einer Spalte. Stelle Dir in deinem Beispiel vor, Du hast 3 Filialen und Du hast dementsprechend umsatz1, umsatz2, umsatz3. Die Umsätze von Januar bis Dezember der einelnen Filialen stehen untereinander in der Tabelle (12 Datensätze). Nun summierst Du die einzelnen Spalten auf und hast meinetwegen die folgenden (bereits aufsummierten) Umsätze: umsatz1=200, umsatz2=400,umsatz1=800, Ich möchte nun den Gesamtumsatz von allen drei Filialen (1400) per Abfrage errechnen lassen. Man kann natürlich per Ausdruck rechen (also "Ausdruck : [umsatz1]+[umsatz2]+[umsatz3]"), das ist bei drei Filialen auch o.k aber es geht hier um grössere Zahlen. Aber Danke schon mal für Deine Mühen.
    Gruss
    Stephan
     
  4. snaggles

    snaggles Kbyte

    nö, sind doch keine Mühen, macht doch Spass!

    das geht mit der SQL-Abfrage so:

    SELECT sum(umsatz1+umsatz2+umsatz3) as gesamtumsatz
    FROM anytable

    das sollte jetzt dann der Volltreffer sein, oder?

    Ähm, die Zahl kann dabei schon gross werden aber das kannst Du bei der Abfrage der Datenbank überlassen, die macht das dann schon so, wie das sein muss.
     
  5. stephan2000

    stephan2000 Kbyte

    Hi,
    das ist leider nicht der Volltreffer. Es ist genau das, was ich bisher gemacht habe und nicht möchte. Wenn Du auf eine Tabelle schaust, dann hast Du oben einen Feldnamen und darunter einzelne Werte aus den Datensätzen. Nun kannst Du ganz einfach auf den Funktionsknopf drücken und bei den Funktionen Summe auswählen (Da Du auf SQL stehst, in SQL ist das :Sum([Tabelle].Feldname) AS [Summe von Feldname]) Und schon steht als Ergebnis die Summe da. Nun interessiert es dich ja nicht, wie viele Datensätze Du untereinander in deiner Tabelle hast, sie werden in jedem Falle über die Funktion Summe aufsummiert. Kommt ein Datensatz hinzu, oder werden welche gelöscht, so interessiert das ebenfalls nicht, es wird immer die ganze Spalte hinunter ausummiert egal was da drin steht. Ganz anders in dem von Dir (und auch vorher von mir) beschriebenen Beispiel. Kommt eine Filiale (eine neue Spalte in der Tabelle) hinzu musst Du den Klammerinhalt ändern, aus sum(umsatz1+umsatz2+umsatz3) wird dann sum(umsatz1+umsatz2+umsatz3+umsatz4) fällt eine Filiale weg, musst Du ebenfalls etwas ändern. Verstehst Du nun was ich meine. Ich möchte nebeneinanderstehende Feldinhalte mittels einer Funktion aufsummieren. Die Frage ist natürlich ob das geht.
    Gruss Stephan
     
  6. racoon0506

    racoon0506 Kbyte

    Du willst also die Zeilensumme flexibel halten.
    Ich behaupte,dass die Tabellenstruktur dafür nicht optimal ist.....
    (vermute, dass sich daran aber nichts ändern lässt und du mit der Tabelle leben musst, wie sie ist.)
    Die Tabelle sieht also etwa so aus:
    Monat....Umsatz1.....Umsatz2....Umsatz3....UmsatzX
    Januar....200.........400........800...................
    Februar.....
    März.
    ...
    Dezember....

    Korrekt aufgebaut wäre sie etwa so:
    Monat Filiale Umsatz
    Januar.1......200
    Januar.2......400
    Januar.3......800
    Februar....
    März....
    ....
    Dezember....

    dabei kommt es nicht auf die Anzahl der Filialen an. Die Umsätze können nach der Filialnummer oder dem Monat(gruppiert) summiert werden und bei Bedarf ähnlich einer Kreuztabellenabfrage in der alten Matrix ausgegeben werden.

    Zurück zum Problem. Allein mit einer Abfrage wird das nicht möglich sein. Da die Anzahl der Umsatzfelder variabel ist und sich jederzeit ändern kann, muss dass über eine VBA Routine ermittelt werden.
    (ungetestete Idee...)
    Man nehme ein Recordset (Quelle ist deine Tabelle), durchlaufe alle Felder(ab dem zweiten Feld, da die erste wohl immer der Monat ist) und wertet dabei aus, wie viele Umsatzfelder existieren.
    Anschliessend kann zu jedem (oder einem ausgewählten) Monat ein dynamischer SQL-String erstellt werden, der über eine Schleife die Anzahl der vorhandenen Filialumsatzfelder in die Summenfunktion einfügt.
    Dieser SQL-String kann dann via VBA in einer Abfrage gespeichert werden (zwecks weitere Ausführung an anderer Stelle?) oder aber direkt ausgeführt werden. (z.B. CurrentDB.Execute)

    ist zwar keine fertige Lösung, aber vielleicht hilft es trotzdem weiter.

    cu, Jan
     
  7. snaggles

    snaggles Kbyte

    Hi Stephan,

    dafür habe ich ausser einer grundlegenden Tabellenänderung auf ein anderes Format keinen Vorschlag, was aber wahrscheinlich wohl bedingen würde, dass die Anwendung, die diese Tabelle befüllt und wohl auch ändert, ebenfalls umgeändert werden müsste. Die Anforderung ist mir nach Deiner Erläuterung jetzt schon klarer.

    Meine "SQL-Manie" liegt daran, dass ich mit vielen Datenbank-Systemen arbeite und dies universeller ist.
     
Thread Status:
Not open for further replies.

Share This Page