PDA

Vollständige Version anzeigen : Summe einer Spalte unter Berücksichtigung der Kriterien einer anderen Spalte


Wissensdurst
01.10.2009, 11:48
Mahlzeit alle miteinander ;)

Mich plagt gerade folgendes Problem:

Ich habe eine Tabelle mit den Spalten "Vertragskosten" und "Abrechnungszeitraum" (in Letzterer stehen die Werte "Monat", "Quartal" und "Jahr").

Jetzt möchte ich mir in einem Formular ein Textfeld anzeigen lassen, welches sich 1.) immer aktualisiert und mir 2.) die monatlichen Kosten aller Verträge ausgibt.

1.) lässt sich vermutlich mit dem "Bei Geändert"-Ereignis des Textfeldes steuern?!

2.) gibt mir Rätsel auf...

In Excel wäre das mit einer einfachen for-Schleife zu machen, in der man die Vertragskosten unter Überprüfung des Abrechnungszeitraumes (Jahr = Vertragskosten/12; Quartal = Vertragskosten/4) addieren lässt. Wie aber funktioniert so etwas in Access?

Besten Dank im Voraus + viele Grüße

Christian

Atrus2711
01.10.2009, 11:54
Hi,

so ganz versteh ich die Lage nicht, aber wenn es darum geht, die Vertragskosten durch einen zeitraumabhängigen Wert (1,4,12) zu teilen, dann könntest du diesen Divisor mit eine Switch oder einem Choose aufstöbern.

Monatswert: =Betrag / Switch(Zeitraum="Jahr";1;Zeitraum="Quartal";4;Zeitraum="Monat";12)

Oder noch besser: die Divisoren direkt beim Zeitraum ablegen

Und am allerbesten: normierte Daten und ein gescheites Datenmodel :)

Zudem: In aller Regel sind Monatsbeiträge nicht 1/12 des Jahresbeitrags, allein schon wegen Barwertvorteil und Verwaltungsaufwand...

Wissensdurst
01.10.2009, 12:29
vorab vielen dank!

oh ja, barwertvorteil... holt mich mein studium doch noch mal ein, welch elend ;)

das mit dem switch klingt schon interessant, aber wie mache ich das denn für alle zellen der spalte? ein beispiel zum besseren verständnis:


spalte kosten / spalte zeitraum

10 € / Monat
24 € / Jahr
16 € / Quartal
5 € / Monat


jetzt soll mir das textfeld im formular anzeigen: "21 €" (also 10+24/12+16/4+5).

falls das mit dem switch-befehl geht, könntest du mir bitte noch kurz erklären, wie ich den in eine sql-abfrage einbauen muss, damit das richtig funktioniert.

sorry, aber ich bin erst vor ein paar wochen in access eingestiegen und diese sql-syntax macht mir echt noch zu schaffen ;P

Atrus2711
01.10.2009, 12:42
Wenn deine Beispieltabelle mal Demo heiße:

SELECT
Sum([Betrag] / Switch([Zeitraum]="Monat";1;[Zeitraum]="Jahr";12;[Zeitraum]="Quartal";4))
FROM Demo
Betrag durch "Divisor", wobei der Divisor aus dem Zeitraum übersetzt wird. Wenn du die möglichen Zeiträume in eine eigene Tabelle auslagerst, könntest du da auch deren Divisoren unterbringen und durch die teilen. Du hättest dann ein eigenes, echtes Feld statt eines "hergerechneten" Divisors:

SELECT Sum([Betrag]/[Divisor])
FROM Demo INNER JOIN Zeitraeume
ON DEMO.Zeitraum = Zeitraeume.Zeitraum

Besser lesbar, oder?

Wissensdurst
01.10.2009, 15:10
hervorragend, vielen dank - funktioniert einwandfrei!

es scheitert bei SQL übrigens nicht an der lesbarkeit, sondern vielmehr an den vielen unterschiedlichen, seltsam verschachtelten anführungszeichen und klammern ;)

schönen abend noch!