Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Problem bei der Formulierung der WHERE Klausel

Dieses Thema im Forum "Oracle" wurde erstellt von Kautzer, 16 Mai 2013.

  1. Kautzer

    Kautzer Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. ukulele

    ukulele Datenbank-Guru

    Und was spricht gegen:
    Code:
    SELECT    *
    FROM    TabelleA
    WHERE    Auftnr = :Auftnr
    OR        Auftnr IS NULL
    AND        'andere Prüfung'
     
    akretschmer gefällt das.
  4. akretschmer

    akretschmer Datenbank-Guru

    Ähm - nix IMHO.
     
  5. Kautzer

    Kautzer Neuer Benutzer

    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.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    http://www.postgresql.org/docs/9.2/static/sql-select.html

    Andreas
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden