SQL-Befehl IF?
Mipe
- datenbank
0 Sven Rautenberg0 Mipe0 Ralf Walther0 Mipe0 Axel Richter
Hallo, ich will in SQL eine Abfrage formulieren, die ungefähr folgendes enthalten soll:
---
Select Bezeichnung, Stück, Preis, Rabatt, (Stück*Preis) AS Gesamt_NoRabatt, (Preis/100*(100-Rabatt)*Stück) AS Gesamt_Rabatt FROM ...
---
Mein Problem ist jetzt, daß das Feld Rabatt teilweise NULL-Werte enthält. Deswegen wird natürlich in Gesamt_Rabatt auch NULL dargestellt, obwohl hier dann dasselbe wie in Gesamt_NoRabatt erscheinen soll.
Ich hab schon probiert das ganze in eine IF-Anweisung zu packen, aber es klappt einfach nicht.
Könnt ihr mir vielleicht weiterhelfen, daß wenn kein Rabatt vorhanden ist, er als Gesamt_Rabatt dasselbe anzeigt wie in Gesamt_NoRabatt?
Ich wäre euch sehr dankbar,
Mipe
Moin!
Könnt ihr mir vielleicht weiterhelfen, daß wenn kein Rabatt vorhanden ist, er als Gesamt_Rabatt dasselbe anzeigt wie in Gesamt_NoRabatt?
Logisch: Setze in alle Felder, in denen NULL steht, die Zahl 0 ein - dann hast du diese Ausnahmebehandlung nicht mehr. Dann solltest du noch die Tabellendefinition dieser Rabattspalte auf "not_null" setzen, und den Standardwert ebenfalls auf "0" setzen, damit dir keine NULL-Werte mehr in die Datenbank kommen.
Die Ursache deines Problems ist schlicht ein mangelhaftes Datenmodell. :)
- Sven Rautenberg
Und mal davon ausgehend, daß ich an der Datenbankstruktur an sich nichts verändern möchte?
Ich mein, es gibt doch eine IF-Anweisung und es könnte ja auch sein, daß jeder, der unter 5% Rabatt hat, auch den Gesamt_NoRabatt-Wert bekommen soll.
Mipe
Hallo Mipe,
Alternativen zur Lösung von Sven (d.h. wenn keine DB-Strukturänderungen möglich sind) hängen von der DB ab.
Bei Oracle gibt es die Funktion NVL, bei MySQL die Funktion
IFNULL beide haben 2 Parameter; für andere DBs weiß ich nicht (Access hat m.E. sowas nicht). Wenn der erste Parameter = NULL, dann wird der Wert des zweiten zurückgeliefert, ansonsten der erste.
Gruß Ralf
Vielen Dank Ralf... ISNULL() war exakt das, was ich gesucht habe. Jetzt funktioniert es einwandfrei
Mipe
Hallo Ralf,
Bei Oracle gibt es die Funktion NVL, bei MySQL die Funktion
IFNULL beide haben 2 Parameter; für andere DBs weiß ich nicht (Access hat m.E. sowas nicht).
Warum nicht?
SELECT Preis, Menge, Rabatt, IIf([rabatt] Is Null,0,[rabatt]) AS NumRabatt, [Preis]*[Menge] AS Ges1, [Preis]*(100-[NumRabatt])/100*[Menge] AS Ges2 FROM Tabelle2
Was habt Ihr nur alle gegen ACCESS? Nur weil man etwas nicht kennt, muss es noch nicht schlecht sein. Und wie war das noch mit dem berühmten Zitat von Dieter Nuhr ... ;-))
viele Grüße
Axel