Discussion:
MAX-Funktion in Abfrage
(zu alt für eine Antwort)
Thomas Mauritz
2009-08-10 17:43:01 UTC
Permalink
Moin Moin aus Kiel,

ich möchte in einer Abfrage ein Feld errechnen. Wenn der Wert aber negativ
ist, dann soll der Wert auf '0' gesetzt werden.

in Excel geht das mit: max(summe(a+b-c+d);0)

Wie geht das in Access in einer Abfrage?

Die Abfrage wird zudem noch Gruppiert, da es zu jeder ID mehrere Datensätze
geben kann.

Beispiel:
Feld1="ID" --> Gruppierung
Feld2="Wert2" --> Summierung
Feld3="Wert3" --> Summierung
Feld4="Wert4" --> Summierung
Feld5=Summe([Feld1]+([Feld2]*-1)-[Feld4])

Und wenn das Ergebnis der Berechnung pro Datensatz negativ ist, dann soll in
Feld5 '0' stehen.

Wie und wo ist das in einer Abfrage einzustellen?

Gruß
Thomas
Thomas Möller
2009-08-10 18:31:46 UTC
Permalink
Hallo Thomas,
Post by Thomas Mauritz
ich möchte in einer Abfrage ein Feld errechnen. Wenn der Wert aber negativ
ist, dann soll der Wert auf '0' gesetzt werden.
Wie geht das in Access in einer Abfrage?
Die Abfrage wird zudem noch Gruppiert, da es zu jeder ID mehrere Datensätze
geben kann.
Feld1="ID" --> Gruppierung
Feld2="Wert2" --> Summierung
Feld3="Wert3" --> Summierung
Feld4="Wert4" --> Summierung
Feld5=Summe([Feld1]+([Feld2]*-1)-[Feld4])
Und wenn das Ergebnis der Berechnung pro Datensatz negativ ist, dann soll in
Feld5 '0' stehen.
Wie und wo ist das in einer Abfrage einzustellen?
das kannst Du mit der Funktion IIF lösen:

Feld5=Summe(IIF([Feld1]+([Feld2]*-1)-[Feld4]<0;0;[Feld1]+([Feld2]*-1)-[Feld4])


HTH
--
Thomas

Homepage: www.Team-Moeller.de
Peter Doering
2009-08-10 20:41:22 UTC
Permalink
Hallo Thomas,
Post by Thomas Mauritz
ich möchte in einer Abfrage ein Feld errechnen. Wenn der Wert aber negativ
ist, dann soll der Wert auf '0' gesetzt werden.
Wie geht das in Access in einer Abfrage?
Die Abfrage wird zudem noch Gruppiert, da es zu jeder ID mehrere Datensätze
geben kann.
Feld1="ID" --> Gruppierung
Feld2="Wert2" --> Summierung
Feld3="Wert3" --> Summierung
Feld4="Wert4" --> Summierung
Feld5=Summe([Feld1]+([Feld2]*-1)-[Feld4])
@Thomas Ma.: Sehe ich das richtig? Du addierst die ID? ;-)
Post by Thomas Mauritz
Und wenn das Ergebnis der Berechnung pro Datensatz negativ ist, dann soll in
Feld5 '0' stehen.
Wie und wo ist das in einer Abfrage einzustellen?
... die aber landlaeufig als boese gilt. Bei dem Thema ist wieder mal Zeit,
ein bisserl Algebra auszupacken:

Feld5=Summe(([Feld1]+([Feld2]*-1)-[Feld4])*(([Feld1]+([Feld2]*-1)-[Feld4])>0)*-1)

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Henry Habermacher
2009-08-11 06:47:04 UTC
Permalink
Hallo Peter
Post by Peter Doering
Feld5=Summe(([Feld1]+([Feld2]*-1)-[Feld4])*(([Feld1]+([Feld2]*-1)-[Feld4])>0)*-1)
Die Algebra ist bei Dir aber schon länger her, gell.

[Feld1]+([Feld2]*-1)-[Feld4]

entspricht

Feld1 - (Feld2 + Feld4)

oder

Feld1 - Feld2 - Feld4

also, ganz ohne Multiplikation ;-)

Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Peter Doering
2009-08-11 15:10:13 UTC
Permalink
Hallo Henry,
Post by Henry Habermacher
Post by Peter Doering
Feld5=Summe(([Feld1]+([Feld2]*-1)-[Feld4])*(([Feld1]+([Feld2]*-1)-[Feld4])>0)*-1)
Die Algebra ist bei Dir aber schon länger her, gell.
[Feld1]+([Feld2]*-1)-[Feld4]
entspricht
Feld1 - (Feld2 + Feld4)
oder ...
Ist mir durchaus bewusst, aber dieser Teil stammt aus dem OP. Ich hatte es
mit Absicht dringelassen, damit die Originalformel von meinen Aenderungen
unterscheidbar ist. Du darfst den OP aber gerne darauf aufmerksam machen
;-)

Gruss - Peter
--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com
Henry Habermacher
2009-08-12 04:04:10 UTC
Permalink
Hallo Peter
Post by Peter Doering
unterscheidbar ist. Du darfst den OP aber gerne darauf aufmerksam machen
Du wolltest "ein bisserl Algebra" auspacken, nicht der OP ;-P

Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Thomas Mauritz
2009-08-11 07:05:01 UTC
Permalink
Hallo Peter,

da hast Du aber so etwas von Recht! Ich addiere natürlich nicht die ID,
sorry für die Verwirrung.

Die ID wird gruppiert und die Summenfelder (Feld2, Feld3, Feld4) werden
summeirt und verrechnet.

Die IIF-Funktion kenne ich und das habe ich auch so gelöst. Ich wollte
eigentlich nur wissen ob man das wie in Excel mit der MAX-Funktion lösen
kann. Also:
'MAX(Summe(]Feld2]+([Feld3]*-1)-[Feld4])'

Da kam gestern bei und im Projekt diese frage auf ob man das so nicht auch
in Excel lösen kann. Also wie wirdt nun die MAX-Funktion in einer
Access-Abfrage gelöst?

Danke für die information und Deine Unterstützung

Gruß
Thomas
Henry Habermacher
2009-08-11 07:41:40 UTC
Permalink
Hallo Thomas
Post by Thomas Mauritz
Da kam gestern bei und im Projekt diese frage auf ob man das so nicht auch
in Excel lösen kann. Also wie wirdt nun die MAX-Funktion in einer
Access-Abfrage gelöst?
Nein, so eine Möglichkeit gibt's in einer Abfrage nicht, dazu ist eben IIf()
vorgesehen. Eine Alternative wäre Switch, das in Deinem Fall so aussehen
könnte:

Feld5: Switch(Feld2 >= (Feld3 + Feld4); Feld2 - (Feld3 + Feld4);Feld2 <
(Feld3 + Feld4);0)

Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Henry Habermacher
2009-08-11 07:44:57 UTC
Permalink
Hallo Thomas
Post by Thomas Mauritz
Da kam gestern bei und im Projekt diese frage auf ob man das so nicht auch
in Excel lösen kann. Also wie wirdt nun die MAX-Funktion in einer
Access-Abfrage gelöst?
Bevor wir's vergessen: Du kannst natürlich auch selber eine MyMax() Funktion
schreiben, welche genau wie die von Excel funktioniert und diese dann in der
Abfrage aufrufen. Diese UDFs sind genau für solche Zwecke sehr geeignet,
allerdings solltest Du davon abstand nehmen, diese in Where Bedingungen zu
verwenden.

Gruss
Henry
--
AEK 12 - Anmeldung bei www.donkarl.com/?AEK
Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com
Lesen Sie weiter auf narkive:
Loading...