Anmelden

View Full Version : SQL-Abfrage mit bedingtem Where



Tobse77
21-02-08, 14:33
Hallo zusammen,

bin noch ziemlich neu im SQL-Umfeld und suche seit 2 Stunden händeringend eine Lösung für folgendes Problem:

Um unsere Programmierer zu entlasten, möchte ich unseren Usern ein Programm zur Hand geben, um sich selbst Verkaufsstatistiken zu erstellen. Hierfür habe ich eine DSPF erstellt, in welcher die User die gewünschten Auswertungen spezifizieren können.
Wenn ein Anwender z. B. alle Umsätze einer best. Kundengruppe möchte, so soll er nur diese in das Feld IKDGR eintragen müssen.
Da ich aber noch viele andere Felder abfragen lassen möchte, muss ich meine WHERE-Anweisung bedingen, so dass ich nur die Werte in meiner WHERE-Anweisung abfrage, die der Benutzer auch eingegeben hat.

Also ungefähr so:

Select Feld1, Feld2 .... from LIB/FILE
where
if :IKDGR > 0 then FILE.KDGR = :IKDGR end AND
if :IVERBAND > 0 then FILE.VERBAND = :IVERBAND end AND
if :IKDNR > 0 then FILE.KDNR = :IKDNR end AND ....

Soweit verständlich ausgedrückt ??

BenderD
21-02-08, 14:48
Hallo,

relativ einfach geht das mit between und Vorbelegung der entsprechenden Variablen mit highval und loval; wenn dann nix ausgewählt wird, dann kriegt man alles.

D*B


Hallo zusammen,

bin noch ziemlich neu im SQL-Umfeld und suche seit 2 Stunden händeringend eine Lösung für folgendes Problem:

Um unsere Programmierer zu entlasten, möchte ich unseren Usern ein Programm zur Hand geben, um sich selbst Verkaufsstatistiken zu erstellen. Hierfür habe ich eine DSPF erstellt, in welcher die User die gewünschten Auswertungen spezifizieren können.
Wenn ein Anwender z. B. alle Umsätze einer best. Kundengruppe möchte, so soll er nur diese in das Feld IKDGR eintragen müssen.
Da ich aber noch viele andere Felder abfragen lassen möchte, muss ich meine WHERE-Anweisung bedingen, so dass ich nur die Werte in meiner WHERE-Anweisung abfrage, die der Benutzer auch eingegeben hat.

Also ungefähr so:

Select Feld1, Feld2 .... from LIB/FILE
where
if :IKDGR > 0 then FILE.KDGR = :IKDGR end AND
if :IVERBAND > 0 then FILE.VERBAND = :IVERBAND end AND
if :IKDNR > 0 then FILE.KDNR = :IKDNR end AND ....

Soweit verständlich ausgedrückt ??

Pikachu
21-02-08, 14:58
Probier's mal so:




SELECT Feld1, Feld2 ....
FROM LIB/FILE
WHERE CASE WHEN :IKDGR <> 0 THEN :IKDGR ELSE KDGR END = KDGR
AND CASE WHEN :IVERBAND <> 0 THEN :IVERBAND ELSE VERBAND END = VERBAND
AND CASE WHEN :IKDNR <> 0 THEN :IKDNR ELSE KDNR END = KDNR
AND ....

Tobse77
21-02-08, 15:07
Hallo BenderD und Pikachu,

vielen Dank für die Antworten !!!

Funktionieren beide, wobei ich mich für die von Pikachu entschieden habe, da ich dann keine weiteren Hostvariablen initialisieren muss und mir diese Lösung "eleganter" erscheint.

Vielen Dank nochmal !!