Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: SQL-Abfrage in Access
AUTOR BEITRAG
†ЯøjãnэЯ *www.mh-auto.de*

RANG Deckschrubber

#1 - 02.10 11:45

Es existiert eine Tabelle EC. Diese enthält alle momentan vorhandenen ProductLines (PL´s sind Hauptgruppen der einzelnen Produkte.
Falls eine neue PL hinzukommt, muss diese Tabelle dementsprechend aktualisiert werden.)
(Momentane PL´s: A, B, C, D, E, F, G, H, I, J)
Spalten der Tabelle EC: PLid, PL, Budget

Außerdem existiert eine Tabelle Result. Diese besteht aus vier Spalten (PL, Product, Year, Budget)

Nun soll eine Abfrage gestartet werden, welches Jahr ausgewertet werden soll.

Bspw. möchte man nun das Jahr 2007 auswerten:
Nun soll das Gesamtbudget einer Productline ermittelt werden.

D.h. die Tabelle Result wird durchlaufen. und nach jeder zeile wird das budget für das product zu dem gesamtbudget in der tabelle EC addiert.

Wie kann man das am Besten anstellen?

Die Tabellen sind in einer Access DB.

Ich mööchte das Ganze in einem Formular per einem Mausklick ausführen lassen.

Help :( Hab nicht viel Ahnung von SQL / VBA...



hier mal n "java-ähnlicher"-algorithmus wie es ausschauen könnte. jedoch kA wie man das in vba einfügt...

code:

for (int i=1; i<Result.length; i++) //Momentan 3315 Zeilen
{
if (Result[i].SpalteYear == eingabeJahr) // i=Zeile
{
switch (Result[i].PL)
{
case "A": EC.Zeile1.SpalteBudget = EC.Zeile1.SpalteBudget + Result[i].SpalteBudget

case "B": EC.Zeile2.SpalteBudget = EC.Zeile2.SpalteBudget + Result[i].SpalteBudget:

usw.... (10mal insgesamt)

} //endswitch

} //endif

} //endfor i 
Morath

RANG Deckschrubber

#2 - 09.10 12:59

Also die erste Frage, die man da mal stellen muss:

wieso existiert das berechnete Feld "Budget"(-Summe) in der Tabelle EC?

Die Abfrage (aufs Wesentliche verkürzt)

SELECT sum(Budget) FROM Result
WHERE Year = ?
GROUP BY PL

liefert die Summe immer für ein zu definierendes Jahr (das kann man in Access glaub ich mir [Year] vom Benutzer abfragbar machen).

Eine der Regeln der DB-Modellierung besagt nämlich, dass berechnete Felder in Tabellen nix verloren haben. In deinem Fall hättest du nämlich das Problem, was passiert, wenn mal jemand die Summierung versehentlich mehrmals für das gleiche Jahr aufruft, die Summe in Tabelle EC würde dadurch verfälscht (wenn immer nur dazuaddiert wird). Du müsstest dann einen Mechanismus schaffen, der verhindert, dass der Summieralgorithmus mehrmals auf den gleichen Daten aufgerufen wird und das ist nicht unbedingt trivial.

Daher mein Tip: die Berechnung von der Abfrage durchführen lassen (joins mit der Tabelle EC für weitere Daten sind ja möglich) und dann das Anzeigeformular oder den Bereicht der das Ergebnis zeigen soll, auf dieser Abfrage basieren lassen.


So, ich hoffe ich hab die Problematik richtig verstanden und das hilft weiter :-)
†ЯøjãnэЯ *www.mh-auto.de*

RANG Deckschrubber

#3 - 10.10 07:50

vielen dank!

hat mich weiter gebracht :) dankeschön