Problem bei der Formulierung der WHERE Klausel

Kautzer

Neuer Benutzer
Beiträge
2
Hallo,
ich brauche eine SQL Abfrage, die prüft, ob ein Wert in der Tabelle dem angegebenen Wert entspricht und WENN er das NICHT tut, dann, aber auch nur dann eine andere Prüfung durchführt.

Etwa so:
SELECT * FROM TabelleA WHERE Auftnr = :Auftnr ( oder wenn :Auftnr NULL sein sollte dann soll eine andere Prüfung durchgeführt werden ).

Die Abfrage soll später in einem Report verwendet werden, daher :Auftnr als Parameter, der geprüft werden müsste.

Ich verwende Oracle Reports 6i und eine Oracle 11gR2 DB. Ich komme einfach nicht auf die Lösung! Also über eine "normale" OR Verknüpfung bekomme ich ja Ergebnisse, die ich nicht haben möchte (also Datensätze wo die Auftnr passt ODER eben wo die andere Bedingung zutrifft, aber ich möchte ja, sofern :Auftnr gefüllt ist, nur nach Auftnr suchen, die andere Bedingung außer Acht lassen ).

Und eine AND Verknüpfung ist auch nicht korrekt, da der Parameter auch leer sein kann. Es muss nicht immer eine bestimmte Auftnr gesucht werden. Und 0 oder NULL oder einen andern Wert als DEFAULT zu hinterlegen geht auch nicht bzw. wäre auch nicht korrekt.

Bitte um Hilfe!

Liebe Grüße
 
Werbung:
Hallo,
ich brauche eine SQL Abfrage, die prüft, ob ein Wert in der Tabelle dem angegebenen Wert entspricht und WENN er das NICHT tut, dann, aber auch nur dann eine andere Prüfung durchführt.

Etwa so:
SELECT * FROM TabelleA WHERE Auftnr = :Auftnr ( oder wenn :Auftnr NULL sein sollte dann soll eine andere Prüfung durchgeführt werden ).

Schnellschuß: prüfe zuerst alle mit Auftnr NOT NULL auf den Wert und dann alle mit Auftnr IS NULL mit der anderen Condition und verlöte das dann mit UNION ALL.
 
Danke für die Antwort. So hab ich es jetzt gemacht:

Code:
SELECT *
  FROM TabelleA
WHERE ( ( :Auftnr IS NOT NULL AND TabelleA.Auftnr = :Auftnr ) OR ( :Auftnr IS NULL AND AuftTyp IN ( 1 ) ) )

@akretschmer: deine Antwort war, bis auf Union All, verständlich (für mich). Könntest Du mir Union All bitte kurz erklären, oder hast Du ne Seite wo das erklärt wird? SuFu hat keine Erklärung gebracht.

Danke.
 
Werbung:
Zurück
Oben