SQL Oracle abgefragte Felder ändern anders ausgebe

Hallo zusammen,

Ist es möglich in Oracle eine Abfrage so zu gestalten, dass das Abgefragete Feld anders ausgegeben wird?

Beispiel:

Ich frage das Feld KundenID ab

a) Wenn es leer ist, dann soll Leer ausgegeben werden

b) Wenn was vorhanden ist, dann soll Vorhanden ausgegeben werden.

Komisches Beispiel, aber die brauche nur die Funktion für sowas.

Vielen Dank

MfG sabar

Hallo,

mach es entweder so

SELECT 
CASE WHEN NVL(KundenId, 'NULL') = 'NULL' THEN 'Leer' ELSE 'Vorhanden' END
FROM Tabelle

oder so

SELECT NVL2(KundenId, 'Vorhanden', 'Leer') FROM Tabelle

MfG Dominik

Hey Dominik

Vielen Dank für die schnelle Antwort. Bravo! Läuft prima. Vielen Dank.

Kannst du mir vielleicht noch sagen wie ich es schaffe, dass…

  1. Wenn feld = leer dann ‚Leer‘
  2. Wenn feld = Auto dann ‚Auto Vorhanden‘
  3. Wenn feld = Flugzeug dann ‚Flugzeug Vorhanden‘

So, dass alle Bedinngungen erfült sind.
Dacht da an if … then … elseif … then … else …

Vielen Dank :smile:

1 Like

Hallo,
klar das geht mit CASE, damit kannst du soviele Bedingungen einbauen wie du möchtest.

SELECT 
CASE WHEN NVL(feld, 'XX') = 'Auto' THEN 'Auto vorhanden'
 WHEN NVL(feld, 'XX') = 'Flugzeug' THEN 'Flugzeug vorhanden'
 WHEN NVL(feld, 'XX') = 'XX' THEN 'Leer'
 ELSE 'etwas anderes vorhanden'
END
FROM Tabelle

Die Nullvalue Funktion ist nötig, da es fast immer zu ungewollten Ergebnissen kommt wenn man versucht mit NULL zu vergleichen.

MfG Dominik

Die Nullvalue Funktion ist nötig, da es fast immer zu
ungewollten Ergebnissen kommt wenn man versucht mit NULL zu
vergleichen.

MfG Dominik

Vielen Dank noch mal, leider habe ich das Problem, dass ich keinen Wert bekomme wenn garkeine Einträge in die Datenbank gemacht wurden :frowning:
Wie es aussieht wird das Feld erst erstellt wenn ich eine Auswahl getätigt habe. Wie kann ich das nun machen wenn ich möchte, dass von anfang an immer der Wert ‚Feld ist leer‘ kommt. Doch sobald was gespeichert wird, soll es umbenannt werden.

Beispiel

Nichts wurde erfasst (Feld existiert wahrscheinlich nicht)
Abfrage soll ausgeben ‚Feld ist leer‘
Lösung ??? Ist ein leeres Feld = ‚NULL‘ ???

Auto wurde angeklickt
Abfrage soll ausgeben ‚Auto vorhanden‘
Lösung: CASE WHEN feld = ‚Auto‘ THEN ‚Auto vorhanden‘

Flugzeug wurde angeklickt
Abfrage soll ausgeben ‚Flugzeug vorhanden‘
WHEN feld = ‚Flugzeug‘ THEN ‚Flugzeug vorhanden‘

Ich kapier das nicht, alles läuft nun prima, doch wenn nichts in der DB drin ist, kommt kein text raus :frowning:

Danke, danke… bin schon seit 4h an dieser ******* Abfrage.

Zum Glück Hilft du, sonst wäre ich verzweifelt :frowning:

1 Like

Hallo,

das ist ganz normal wenn du nichts selektierst kommt auch nichts raus.
Du fragst ja eine Tabelle ab, jede Tabelle hat Spalten (Columns) aber wenn keine Zeilen (Rows) vorhanden sind bekommst du eine leere Ergebnismenge bzw. nur die Namen der Spalten.

Ja, Null ist die leere Menge, Null ist nicht das gleiche wie ‚‘ (leerer String) und auch nicht 0.
Mit Null kann man auch nicht vergleichen, man kann nur überprüfen ob ein Feld Null ist.

Wie sendest du denn Queries an die Oracle?
Schreibst du eine PL/SQL Stored Procedure? Benutzt du ADODB mit irgendeiner Programmiersprache? (Dein Elseif lässt vermuten das es VB ist :stuck_out_tongue: )

Du kannst nämlich überprüfen ob dein Query ein Resultset mit Rows zurückgegeben hat und falls nicht deine Ausgabe anpassen.

MfG Dominik

Wie sendest du denn Queries an die Oracle?
Schreibst du eine PL/SQL Stored Procedure? Benutzt du ADODB
mit irgendeiner Programmiersprache? (Dein Elseif lässt
vermuten das es VB ist :stuck_out_tongue: )

Du kannst nämlich überprüfen ob dein Query ein Resultset mit
Rows zurückgegeben hat und falls nicht deine Ausgabe anpassen.

MfG Dominik

Ich gebe die SQL-Befehle in Toad ein. Es handelt sich um eine Oracle DB mit Version 10.x.x.irgendwas. Also kein VB, mein Fehler.

Deine Ratschläge funktionieren super. Nur habe ich das Problem, das dieses leere Feld mit etwasem gefüllt sein muss. Da aber nur Werte in die DB geschrieben werden wenn ich was Speicher (Via HTML, je nachdem welches Feld gewählt wird, wird das in die DB geschrieben) kann ich ja hier nix abfragen. Ich möchte ein Feld machen, in welchem ich die SQL in den HTML-Code schreibe und das Ergebniss soll zeigen was da gespeichert wurde. (klingt kompliziert :smile:)

Meine Idee:

Wenn ich deine SQL mit einem Feld welches immer „Leer“ heisst kombiniere, sollte es doch klappen?

Also Feld1 (Deine Abfrage) ¦¦ Feld2 (Welches immer „Leer“ ist)

= „FlugzeugLeer“

Dann bennene ich das ergebniss in Flugzeug um oder um eben das Problem zu beheben:

Feld1 (kein Wert weil nix in DB) ¦¦ Feld2 (immer „Leer“)

= „Leer“

So bekomme ich alle drei Fälle :smile: Mann bin ich klug :smile:)

Nun muss ich nur noch wissen wie ich zwei Felder aus verschiedenen Tabellen in ein Feld bringe. Ne Idee?

Vielen Dank

1 Like

Meine Idee:

Wenn ich deine SQL mit einem Feld welches immer „Leer“ heisst
kombiniere, sollte es doch klappen?

Also Feld1 (Deine Abfrage) ¦¦ Feld2 (Welches immer „Leer“ ist)

= „FlugzeugLeer“

Dann bennene ich das ergebniss in Flugzeug um oder um eben das
Problem zu beheben:

Feld1 (kein Wert weil nix in DB) ¦¦ Feld2 (immer „Leer“)

= „Leer“

Funktionier leider nicht :frowning:
Die Felder werden ganz am Schluss zusammengeschrieben, da kann ich die Werte nicht mehr umbenennen :frowning:

Wie wärs mit ner Variablen?

Ich speichere den Wert der SQL in ne Variable und füge Bedinungen hinzu:

Wenn Variable = ‚beispieltext‘ dann ‚Flugzeug vorhanden‘
Wenn Variable = ‚beispieltext2‘ dann ‚Auto vorhanden‘

Jemand ne Idee?

1 Like

Hallo saber,

nein das geht nicht du musst eine Zeile selektieren, da kommt sonst nichts. Wenn du nichts selektierst kann auch nichts angezeigt werden.

Id | feld
-----------------------
1 | null
2 | Flugzeug
3 | Auto
4 | null

Da kannst du die Spalte Id mitselektieren und das Query wird funktionieren.

P.S.
Was bin ich doch für Ascii Künstler *lach*

MfG Dominik