Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage mit Summenbildung über 2 Tabellen

Begonnen von ArnoNym, Oktober 22, 2013, 09:39:55

⏪ vorheriges - nächstes ⏩

ArnoNym

Hallo geschätzte Community,
ich komme bei einem Problem nicht recht weiter. Zunächst mal der Kontext: Ich habe ein kleines Projektzeiten-Tool, bei dem Projektzeiten 3 Kategorien zugeordnet sind. Nun soll pro Kalenerwoche ausgegeben werden, wie viel Projektzeit je Kategorie in dieser Woche aufgelaufen ist. Das soll mittels einer Abfrage über 2 Tabellen erfolgen. Die erste Tabelle - nennen wir sie T1 - enthält das Feld Kalenderwoche. Hier sind alle Kalenderwochen eines Jahres aufgelistet. Die zweite Tabelle - nennen wir sie T2 - enthält 4 Felder: Kalenderwoche, Kategorie1, Kategorie2, Kategorie3. Die Kategoriefelder enthalten Zeiten für die einzelnen Projektkategorien und je Kalenderwoche kann es mehrere Zeilen geben.
Ich möchte nun eine Abfrage erstellen, die in der ersten Spalte alle Einträge aus T1 enthält und dann 3 Spalten (Kategorie1, Kategorie2, Kategorie3), wobei in den Kategoriespalten jeweils die Summen der jeweiligen Kategorie aus T2 für die zugehörige Kalenderwoche ausgegeben werden. Grundsätzlich ist das ja kein Problem. Ich habe bereits zwei Lösungswege ausprobiert. Beide sind aber unbefriedigend.

Lösung 1: Kreuztabellenabfrage
Dazu habe ich zunächst T2 so umgewandelt, dass es nicht je Kategorie eine Spalte gibt, sondern stattdesssen eine Spalte mit der Bezeichnung Kategorie, in der dann je Datensatz eine der drei Kategoriebezeichnungen steht, so dass sich das Ganze für eine typische Kreuztabelle eignet. Eine solche Abfrage arbeitet sehr schnell. Es gibt aber ein für meine Anforderungen gravierendes Problem: Es kann nämlich vorkommen, dass für eine Kalenderwoche gar keine Projektzeiten erfasst wurden (z.B. wegen Urlaub). In diesem Fall soll die Woche trotzdem aufgelistet werden und je Kategorie 0 Stunden ausgewiesen werden. Eine Kreuztabellenabfrage liefert aber einen Fehler, wenn es für die KW aus T1 keinen Eintrag in T2 gibt.

Lösung 2: Abfrage über DomSumme oder Select Sum je KW
Das funktioniert zwar, arbeitet aber sehr langsam, um nicht zu sagen zu langsam (vor allem dann, wenn z.B. nicht nur 1 Jahr zu berücksichtigen ist, sondern fortlaufend).

Darum meine Frage: Wie kriege ich es hin, dass eine scheinbar so einfache Abfrage möglichst schnell arbeitet und trotzdem alle Werte aus T1 geliefert werden? Gibt es vielleicht für die erste Lösung einen Trick, so dass Access sich nicht mehr daran stört, dass es für eine bestimmte KW in T2 keine Einträge gibt?

Viele Grüße
Thomas

MzKlMu

Hallo,
Zitatenthält und dann 3 Spalten (Kategorie1, Kategorie2, Kategorie3),
der beste Weg wäre ein normalisiertes Datenmodell aufzubauen, dann ist Dein Wunsch eine Kleinigkeit.
Hier fehlen noch 2 Tabelle:

- Tabelle für die Kategorien als Datensätze (3)
- Tabelle zur Zuweisung der Werte zur Woche

In der 3. Tabelle werden je Woche und Kategorie ein Datensatz gespeichert. Die Werte stehen also untereinander und nicht nebeneinander.
Die 3 Kategorienfelder sind in Tabelle 1 ersatzlos zu löschen.

Access erwartet ein korrektes Datenmodell. Nur dann können vernünftige Auswertungen gemacht werden.
Gruß Klaus