Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kreuztabelle mit Aufsummierung

Begonnen von hajott, Oktober 29, 2018, 14:23:45

⏪ vorheriges - nächstes ⏩

hajott

Hallo Wissende,

ich habe eine Tabelle mit rund 40.000 Statistik-Einträgen (tblEingänge) mit folgendem Feldern (vereinfacht):

ID: Autowert
Datum: Tag, zu dem die Erfassung gehört
Kategorie: Es gibt verschiedene Arten von Zählwerten, von denen aber momentan nur die 1 berücksichtigt werden soll
Wert: Der Wert an sich
KW: Kalenderwoche des Datums (trotz der Redundanz, damit das nicht bei jeder Abfrage neu berechnet werden muss)
KJ: Kalenderjahr zu dieser Woche (aufgrund der Thematik KW nicht immer identisch mit YEAR(tbl.Eingänge.Datum)

Viele normale Abfragen habe ich schon allein hinbekommen, aber es gibt zwei Abfragen, bei denen die jeweilige KW (1-52) in den Zeilen stehen soll und die letzten 5 Jahre in den Spalten. Und zwar soll die eine Tabelle die jeweiligen Wochendurchschnitte enthalten und die andere Tabelle die Gesamtsumme addiert bis zu dieser Woche (seit Jahresbeginn)

Ein Bekannter hat mir das dann gebastelt, und zwar recht komplex. Es wurde für jedes Jahr eine Aliastabelle angelegt und mit Joins verknüpft. Die SQL hatte jenseits der 100 Zeilen, aber es klappte. Die Tabelle mit den Gesamtsummen hat er mit Subselects gemacht, die ich zwar ansatzweise verstehe, aber mir noch die Routine fehlt.

Nun habe ich bei einer früheren Anfrage von euch den Tipp "Kreuztabelle" aufgeschnappt. Um meine Access-Fähigkeiten etwas auszubauen, habe ich mich damit beschäftigt und bin auf die Idee gekommen, mich dem Thema zu nähern, indem ich den Assistenten machen lasse und mir anschließend den SQL-Code ansehe. Und [Trara!] auf diesem Wege habe ich die Tabelle mit den Wochenschnitten der letzten 5 Jahre hinbekommen und es ist schön kurz:

TRANSFORM Round(Avg(tblEingänge.Wert),0) AS MittelwertvonWert
SELECT tblEingänge.KW
FROM tblEingänge
WHERE (((tblEingänge.KJ)>Year(Date())-5) AND ((tblEingänge.Kategorie)=1))
GROUP BY tblEingänge.KW
PIVOT tblEingänge.KJ;


Jetzt bin ich mutig geworden und würde diese viel einfachere Notation auch auf die Auswertungen mit den Summen seit jeweiligem Jahresanfang ausdehnen. Aber es gelingt mir nicht, den Subselect hier einzubasteln. Wer kann helfen?

Zusatzfrage: Zwischen diese Jahresspalten soll im Bericht immer noch ein Prozentwert, wie sich die Werte einer bestimmten KW von Jahr zu Jahr geändert haben. In der alten Form (mit den vielen JOINs) war das kein Problem, da war das jeweils ein zusätzliches Select.
Geht das hier auch?
Wenn nein, wäre das erstmal kein Beinbruch, ich würde eine zweite Abfrage drauflegen und dann im Bericht beides zusammenfließen lassen. Allerdings: Für eine andere Abfrage ist es unflexibel, dass die Kreuztabelle echte Jahreszahlen als Spaltenüberschrift nimmt, denn dann müsste ich das ja jedes Jahr ändern. Kann die Pivottabelle das auch zurückgeben als JahrMinus4, JahrMinus3 und so weiter?

Vielen Dank

Hans-Jürgen