PDA

Vollständige Version anzeigen : Wenn-Dann-Formel in Abfrage


RHsmmp
17.10.2017, 13:26
Hallo,

jetzt habe ich schon lange im Forum gesucht, aber keine Lösung für mein - für Profis vermutlich lächerliches - Problemchen zu finden. Folgendes: Ich habe eine Fahrzeugdatenbank erstellt, in der es u.a. das Feld [Status] gibt. Der [Status] kann sein "Leasing", "Eigentum" oder "Eigentum - nach Leasingende übernommen!"

Als weiteres Feld gibt es z.B. [Leasingrate / Monat].

Jetzt möchte ich gerne in einer Abfrage folgendes herausfiltern:
a) Wenn [Status] = "Leasing", soll die entsprechende [Leasingrate / Monat] angezeigt werden.
b) Wenn Status = Eigentum gibt es keine Leasingrate - also wird auch keine angezeigt
c) (mein eigentliches Problem) Wenn [Status] = "Eigentum - nach Leasingende übernommen!", ist auch in [Leasingrate / Monat] ein Wert vorhanden, der in der Abfrage aber nicht angezeigt werden soll. Am besten soll das Feld in der Abfrage dann leer bleiben!

Wie bekomme ich das hin? Ich habe es mit einer Wenn-Dann-Formel leider erfolglos versucht. Vielleicht habe ich sie aber auch nur an der falschen Stelle eingetragen, oder sie war falsch angelegt... Bin halt Access-Anfänger und daher nicht so bewandert.

Danke schon jetzt für eure Hilfe!

MisterBurns
17.10.2017, 14:06
Hallo,

aus meiner Sicht wird es nicht möglich sein, die Spalte nicht anzeigen zu lassen. Denn was ist, wenn die Abfrage sowohl Leasingfahrzeuge als auch Eigentum anzeigt - was soll dann geschehen? Ich würde es eher mit einem berechneten Feld machen, zB so

Rate: Wenn([Status]="Leasing";[Leasingrate]*1;[Leasingrate]*0)

MisterBurns
17.10.2017, 14:11
Oder noch besser

Rate: Wenn([Status]="Leasing";[Leasingrate];"")

RHsmmp
17.10.2017, 14:14
ich dachte man könnte mit so einer Formel die Ausgabe je Datensatz steuern und nicht nur allgemeingültig für alle Datensätze.

MisterBurns
17.10.2017, 14:17
Der Sinn einer Abfrage ist ja, ein Ergebnis in Spalten zu erhalten.
Die Frage ist, was du mit dem Abfrageergebnis anstellen möchtest. Verwendest du es in einem Bericht oder Formular?
Im Formular könntest du das entsprechende Feld ja je nach Status ein- oder ausblenden lassen. Für den Bericht gilt das Gleiche.

RHsmmp
17.10.2017, 14:38
ich will es in einem Bericht verwenden. Da soll aber nicht die ganze Spalte ausgeblendet werden, sondern es sollen nur keine Leasingbeträge angezeigt werden, wenn das Fahrzeug mal ein Leasingfahrzeug war, wir es aber nach Leasingende gekauft haben. Das ist etwa bei 30 von 200 Fahrzeugen der Fall.

MisterBurns
17.10.2017, 14:40
Na, dann macht der von mir gebrachte Vorschlag genau das was du möchtest. Wenn der Datensatz nicht "Leasing" ist, erscheint auch keine Leasingrate

el_gomero
17.10.2017, 14:43
Hallo,

der Status gehört in eine eigene Tabelle mit Beginn und Endedatum und Leasingrate. Daraus entnimmst du nur die ohne Enddatum (=aktualler Status). Damit hast du bei Leasingübernahmen automatisch ein leeres Feld bei der Leasingrate.

RHsmmp
17.10.2017, 14:46
...cool - jetzt hat´s geklappt! Danke für den Hinweis, Mr. Burns! :)

P.S.: Kann ich das Ergebnis auch noch auf zwei Nachkommastellen runden wenn ich die folgende Formel verwende?
Leasingrate (br): Wenn([Status]="Leasing";[Leasingrate / Monat]*1,19;"")

MisterBurns
17.10.2017, 14:53
P.S.: Kann ich das Ergebnis auch noch auf zwei Nachkommastellen runden wenn ich die folgende Formel verwende?
Leasingrate (br): Wenn([Status]="Leasing";[Leasingrate / Monat]*1,19;"")

Das ist eine Formatierung, die du im Bericht vornimmst. Geht zwar auch in der Abfrage über das Eigenschaftsfenster des berechneten Feldes, ist aber nicht zielführend.

LG
Berni

RHsmmp
17.10.2017, 14:59
Das ist eine Formatierung, die du im Bericht vornimmst. Geht zwar auch in der Abfrage über das Eigenschaftsfenster des berechneten Feldes, ist aber nicht zielführend.

LG
Berni

Wenn ich im Bericht unter Eigenschaften bei Dezimalstellenanzeige "2" angebe, zeigt er mir aber trotzdem noch 4 Stellen an... :(

MisterBurns
17.10.2017, 17:00
Wo setzt du denn die Eigenschaft? Direkt für das Feld?

RHsmmp
18.10.2017, 07:43
Wo setzt du denn die Eigenschaft? Direkt für das Feld?

Ja - ich klicke im Entwurfsmodus im Bericht das Feld an und gehe dann auf die Eigenschaften.

MisterBurns
18.10.2017, 08:01
Ah ja, Access kann scheinbar standardmäßig nicht runden. Das musst du in der Abfrage im berechneten Feld mit einbauen:

Leasingrate (br): Wenn([Status]="Leasing";runden([Leasingrate / Monat]*1,19;2);"")

RHsmmp
18.10.2017, 08:16
Das hatte ich mir auch schon so gedacht. Aber Access rundet dann nur auf max. zwei Nachkommastellen. Habe ich einen geraden Betrag, dann lässt es die Nachkommastellen ganz weg (gibt also nur z.B. 166 statt 166,00 oder 166,1 statt 166,10 aus). Außerdem fehlt dann noch das €-Symbol.
Prinzipiell ist da ja nicht dramatisch. Aber ich habe halt im Bericht auch noch Versicherungskosten und Steuern stehen, die direkt aus der Datenbank genommen werden und die dann im Währungsformat im Bericht stehen. Und mein Chef liebt es halt, wenn es überall gleich ist...

MisterBurns
18.10.2017, 09:09
Tut mir leid, da bin ich dann auch überfragt...

JPA
18.10.2017, 09:38
Versuche mal im Bericht in der Eigenschaft Format folgenden Eintrag:
"€ "#.##0,00

VG
JPA

MisterBurns
18.10.2017, 10:22
Ich hatte ansonsten noch als Ansatz die Idee, dass das eigentliche Feld "Rate" im Bericht unsichtbar gesetzt wird und der Bericht ein berechnetes Steuerelement =[Rate]*1 enthält. Dieses kann dann nämlich problemlos wie gewünscht formatiert werden. Blöd dabei ist, dass die leeren Felder (also dort, wo der Status "Eigentum" ist) dann das Ergebnis #TYP bringen. Und ich habe nicht herausfinden können, wie das zu unterdrücken wäre. Weder mit ISERROR, ISTLEER, ISTNULL noch sonstwie...

ebs17
18.10.2017, 11:18
Anmerkungen:

Dezimalstellenanzeige / Formateigenschaft: Das Nichtanzeigen von vorhandenen Dezimalstellen einer Zahl kann man wohl schwerlich als Runden bezeichnen. Wenn ich die Augen schließe, ist die Welt rundherum trotzdem noch da.
Mit mathematischer Exaktheit hat das dann gar nichts zu tun - Folgerechnungen wie Summieren würden dann völlig überraschend andere Ergebnisse als nach erwarteter Ansicht erzeugen.
Runden ist ein anderer Vorgang, z.B. Runden (http://www.donkarl.com?FAQ2.1).

Leasingrate (br): Wenn([Status]="Leasing";[Leasingrate / Monat]*1,19;"")
Eine Abfrage (SQL-Anweisung) ist kein Excel. Excel kennt kein NULL und keine Datentypen. Da ist es üblich, "" (Nullstring) als leer zu verwenden.
SQL legt aber größten Wert auf Datentypen und deren richtige Anwendung, eine solche grundlegende Standardisierung ermöglicht ja erst entsprechende Bearbeitungsgeschwindigkeiten.
Der Datentyp eines berechneten Feldes ergibt sich aus der Berechnung. Für den Nullstring als Alternativwert kommt als Datentyp nur Text zur Aufnahme in Frage. Ein Text wiederum schert sich wenig um Dezimalstellen, für ihn sind alle Zeichen gleich. Ein Text lässt sich auch schwerlich runden, Textverarbeitung ist etwas anderes als Ausführung mathematischer Operationen mit Zahlen.

Folglich: Setze statt "" NULL ein. NULL ist das Nichts, das Undefinierte, das Nichtvorhandene. SQL-Datentypen können damit bestens umgehen, in Unterscheidung zu Datentypen in VBA, wo nur Variant NULL aufnehmen kann.

MisterBurns
18.10.2017, 11:38
Setze statt "" NULL ein

Mein Gott - na klar! Jeder hat wohl sein eigenes Brett vorm Kopf...
Und siehe da, schon funktioniert die Formatierung im Bericht wie gewünscht.

Danke Eberhard für die Erleuchtung!

RHsmmp
19.04.2018, 10:04
Mein Gott - na klar! Jeder hat wohl sein eigenes Brett vorm Kopf...
Und siehe da, schon funktioniert die Formatierung im Bericht wie gewünscht.

Danke Eberhard für die Erleuchtung!

Auch wenn ich statt Leasingrate (br): Wenn([Status]="Leasing";[Leasingrate / Monat]*1,19;"") nun Leasingrate (br): Wenn([Status]="Leasing";[Leasingrate / Monat]*1,19;NULL) verwende, klappt es bei mir trotzdem noch nicht im Bericht das Format einer Währung mit zwei Nachkommastellen hinzuzufügen.

Hat jemand eine Idee, was ich noch falsch machen?

ebs17
19.04.2018, 11:26
im Bericht das Format einer Währung mit zwei Nachkommastellen
Nimm Deinen Wunsch wörtlich. Das anzeigende Textfeld im Bericht sollte ein entsprechendes Anzeigeformat haben.

RHsmmp
19.04.2018, 11:36
...nein - hat es leider nicht. Da wird gar kein Format aufgelistet.

ebs17
19.04.2018, 11:58
Wenn da nichts Vorbelegtes steht: Du kannst immer eigendefinierte zulässige Formate verwenden, z.B.
#.##0,00 €
Anregungen dazu kann man sich aus der VBA-Hilfe unter (Textbox.)Format holen.

Ggf. könnte es für sich alleine funktionieren, wenn bereits der berechnete Wert als Currency typumgewandelt wird:
CCur([Leasingrate / Monat]*1,19)