PDA

View Full Version : Case in SQL-Where



harkne
29-02-08, 10:33
Hallo zusammen,

ich habe den Beitrag mit dem Case im SQL-Where bereits gelesen.

Mein Problem ist folgendes:
Ich habe eine Maske in der eine Batch-Nummer eingegeben werden kann. Wurde diese eingegeben dann sollen in meinem SQL auch nur Sätze mit dieser Batch-Nummer ausgewählt werden, wenn sie nicht eingegeben wurde dann alle Sätze.

Das SQL dynamisch in einer Variablen zusammen bauen bekomm ich hin. Funktioniert auch, aber nachdem ich das mit CASE gelesen habe dachte ich, ich könnte den CASE benutzen. Das bekomme ich aber nicht hin. Falls dies möglich ist wäre ich für ein konkretes Beispiel dankbar.

Mein Bildschirmfeld heißt DpBtNo
Mein Dateifeld heißt BtNo

Oder gibts vielleicht auch noch eine ganz andere Möglichkeit ?

Vielen Dank im Voraus

--> Ich habe diese Frage ausversehen im Hauptforum bereits gepostet. Bitte die Antworten hier bei Programmierung posten. Danke

Pikachu
29-02-08, 10:39
Meinst du dieses Thema zum CASE (http://www.newsolutions.de/forum-systemi-as400-i5-iseries/newsboard-programmierung/13143-sql-abfrage-mit-bedingtem-where.html)? So könnte das in deinem Fall doch auch gehen?

harkne
29-02-08, 11:38
Yep, den Beitrag hatte ich nicht gesehen. Aber den ELSE-Zweig kann man anscheinend nicht weglassen sondern braucht einen "pseudo-wert" der dann alle auswählt.

Feld 2 bei mir:
Nur Sätze anzeigen die gebucht sind DpBooked. Abfragen muss ich aber Buchungsdatum größer 0. Dies hab ich dann wie folgt gelöst:

AND CASE WHEN :DpBooked = '1' THEN SxBkDt ELSE 1 END > 0

Als ich das ELSE weggelassen habe hats nicht mehr funktioniert.

Fuerchau
29-02-08, 11:50
Wenn du den ELSE wegläßt, ist das Ergebnis NULL, dass du dann mit " is null " abfragen müsstest.

Da ist es besser, die ELSE (der häufigst verwendete Mädchennamen aller Programmiersprachen) anzugeben.