Ich bin´s schon wieder... Ich brauche für die Erstellung eines Diagramms eine Abfrage... und ich beiße mir die Zähne daran aus.....
Also ich habe eine Tabelle. Aufbau:
Vertragseingang | Umsatz
01.01.2014 1000
01.01.2014 50
01.07.2014 500
12.07.2014 700
01.01.2015 800
02.01.2015 3000
12.01.2015 400
Die Abfrage soll nun folgendes Ausspucken:
Tag Monat | Umsatz2014 | Umsatz2015
01.01. 1000 800
02.01. 1050 3800
12.01. 1050 4200
01.07. 1550 4200
12.07. 2250 4200
Umsatz2014: =Summe aller Umsätze im Jahr 2014 welche <= Tag Monat sind.
Beispiel 02.01.: = Summe Umsatz Wo Vertragseingang >=01.01.2014 und <= 02.01.2014
Beispiel 12.07.: = Summe Umsatz Wo Vertragseingang >=01.01.2014 und <= 12.07.2014
Umsatz2015: = Summe aller Umsätze im Jahr 2015 welche <= Tag Monat sind.
Beispiel 02.01.: = Summe Umsatz Wo Vertragseingang >=01.01.2015 und <= 02.01.2015
Beispiel 12.07.: = Summe Umsatz Wo Vertragseingang >=01.01.2015 und <= 12.07.2015
Ich bekomme es einfach nicht über die DOMSumme Funktion hin. Entweder erhalte ich Fehler oder ich erhalte in jeder Zeile die gleiche Zahl... Es ist nichts zu machen.... Kann jemand helfen?
Ich glaub ich habs gelöst... Schreibe es sobald ich es getestet hab.
Mit einer Abfrage wird das nicht machbar sein. Insbesondere gibt es sicherlich Tage, die in einem Jahr Umsatz haben und im anderen Jahr keinen.
Ich kann Dir kurz beschreiben, wie ich solche Dinge löse:
Erstellen einer eigenen Reportingtabelle mit mindestens folgenden Spalten:
Tag (Date) Primary Key
Umsatz_Jahr1 (Double)
Umsatz_Jahr_2 (Double)
Aufbau der Zeilenstruktur mit folgender Abfrage:
SELECT DISTINCT Vertragseingang from tbl***
Schleife:
INSERT INTO tblZwischen (Tag) VALUES(Vertragseingang)
Ende Schleife
Ergebnis sind alle Tage, wo Umsatz haben
Füllen der Werte mit folgender Abfrage:
For i = 2014 to 2015
SELECT Vertragseingang, SUM(Umsatz) AS Tagesumsatz from tbl***
WHERE Format$(Vertragseingang, "yyyy") = i
GROUP BY Vertragseingang
Schleife:
UPDATE tblZwischen ("Umsatz" & i) VALUES(Tagesumsatz)
WHERE Tag = Vetragseingang
Ende Schleife
Next i
Das soll nur ein grober Entwurf sein für den Algorithmus - syntaktische Feinheiten habe ich nicht beachtet.
Evtl. geht es auch mit der eingebauten Pivot-Funktionalität, da kenne ich aber die Möglichkeiten und Grenzen nicht.
Hallo,
warum sollte das nicht mit einer Abfrage machbar sein?
Versuche es mal hiermit:SELECT Distinct Month([vertragseingang]) As Mon, day(vertragseingang) As Tag, Format([vertragseingang],"dd.mm") AS TagMon,
DSum("umsatz","tbl_test_lfdsum","vertragseingang<=" & Format(DateSerial(2014,Month([vertragseingang]),Day([vertragseingang])),"\#mm\/dd\/yyyy\#")) AS U2014,
DSum("umsatz","tbl_test_lfdsum","vertragseingang BETWEEN #01/01/2015# AND " & Format(DateSerial(2015,Month([vertragseingang]),Day([vertragseingang])),"\#mm\/dd\/yyyy\#")) AS U2015
FROM tbl_test_lfdSum
ORDER BY Month([vertragseingang]), day(vertragseingang);
Die ersten beiden Spalten werden für die Sortierung gebraucht, anders wollte Access das nicht akzeptieren.
Zitat von: MaggieMay am Januar 27, 2015, 17:11:36
Hallo,
warum sollte das nicht mit einer Abfrage machbar sein
Ah, ok. An DSUM hatte ich jetzt nicht gedacht. Performancetechnisch ist das aber grenzwertig, weil DSUM für jede Zeile querlesen muss.
Hallo Wurliwurm,
performancetechnisch betrachtet ist ein Recordset-Schleife mit entsprechend vielen Tabellen-Updates sicherlich ebenfalls bedenklich. Das muss man im Einzelfall einfach mal austesten. Mein Vorschlag bezieht sich ich erster Linie auf die Aussage
ZitatMit einer Abfrage wird das nicht machbar sein.
die ich nicht unwidersprochen stehen lassen konnte/wollte.
Zitat von: MaggieMay am Januar 27, 2015, 23:48:26Mein Vorschlag bezieht sich ich erster Linie auf die AussageZitatMit einer Abfrage wird das nicht machbar sein.
die ich nicht unwidersprochen stehen lassen konnte/wollte.
Daß es nicht mit einer Abfrage geht, stimmt pauschal nicht, insofern hast Du recht.
Was die Performance betrifft, so kann man theoretisch sagen, daß es keinen großen Unterschied bei einer lokalen Access-Datei und einer kleinen Datenmenge machen wird. Bei einer leistungsfähigen Server-Datenbank wird die Recordset-Methode schneller durch sein, als Du "Abfrage" sagen kannst, auch bei großen Datenmengen; und auf der anderen Seite mit einer großen Access-Backend-Datei, auf die etliche User zugreifen, wird die Domänenfunktions-Abfrage eine kleine Ewigkeit brauchen. Natürlich gibt es auch noch andere Wege, die Problemstellung zu lösen.