Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: datekk am Januar 27, 2015, 15:12:00

Titel: Vorjahreswerte in Abfrage????
Beitrag von: datekk am Januar 27, 2015, 15:12:00
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?
Titel: Re: Vorjahreswerte in Abfrage????
Beitrag von: datekk am Januar 27, 2015, 16:36:33
Ich glaub ich habs gelöst... Schreibe es sobald ich es getestet hab.
Titel: Re: Vorjahreswerte in Abfrage????
Beitrag von: Wurliwurm am Januar 27, 2015, 16:48:44
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.
Titel: Re: Vorjahreswerte in Abfrage????
Beitrag von: MaggieMay am Januar 27, 2015, 17:11:36
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.
Titel: Re: Vorjahreswerte in Abfrage????
Beitrag von: Wurliwurm am Januar 27, 2015, 18:28:01
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.
Titel: Re: Vorjahreswerte in Abfrage????
Beitrag von: MaggieMay am Januar 27, 2015, 23:48:26
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.
Titel: Re: Vorjahreswerte in Abfrage????
Beitrag von: Wurliwurm am Januar 28, 2015, 10:49:09
Zitat von: MaggieMay am Januar 27, 2015, 23:48:26Mein 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.

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.