# (ORACLE) Frage zu DECODE



## StefanV (5. August 2004)

Hallo.

Ich habe mal eine Frage zur Decode-Anweisung. Ich habe eine Tabelle in einer Oracle-Datenbank. In dieser Tabelle (Bestandteil einer GIS-Anwendung) gibt es u.a. die Spalten Material und Baujahr. Jetzt passiert es, dass manchmal das Material den Wert "unbe" (für unbekannt) hat.

Mein Problem ist, dass ich gerne, wenn die Bedingungen Material=unbe und Baujahr < 1965 zutreffen, das Material auf 'GG' geändert wird.

Ohne Berücksichtigung des Baujahrs funktioniert es sehr gut mit einer DECODE-Anweisung.

SELECT DECODE (MATERIAL,'unbe','GG',MATERIAL) AS NEUMATERIAL FROM STRANG

Doch wie bekomme ich die Bedingung mit dem Baujahr jetzt hin. Bin für jede Hilfe dankbar.

Gruß

Stefan Volkwein


----------



## Thomas Darimont (5. August 2004)

Hallo!

Weshalb verwendest du nicht die CASE WHEN Anweisung? Damit kannst du alles machen, was DECODE auch kann UND die bist im SQL Standard.


```
SQL> select * from strang;

        ID MATERIAL      BAUJAHR
---------- ---------- ----------
         1 UNBE             1960
         2 bbb              1990
         3 unbe             1999

SQL> SELECT ID,
  2  CASE WHEN UPPER(material) LIKE '%UNBE%' AND BAUJAHR < 1965 THEN
  3  'GG' 
  4  ELSE MATERIAL
  5  END, BAUJAHR
  6  FROM strang;

        ID CASEWHENUP    BAUJAHR
---------- ---------- ----------
         1 GG               1960
         2 bbb              1990
         3 unbe             1999
```

Gruß Tom


----------



## StefanV (6. August 2004)

Hallo Thomas.

Vielen Dank für die Antwort. Funktioniert einwandfrei. Ich hatte schonmal mit dem CASE "herumexperimentiert", aber einen Fehler drin. Und da dachte ich (ich greife über ein GIS-Programm auf Oracle zu, und da sind nicht alle SQL oder SQLplus-Befehle implementiert).

Aber jetzt funktioniert es einwandfrei. Habe zwar jetzt ein neues Problem, aber vielleicht melde ich mich dem dann auch nochmal ;o)
Vielen Dank und ein schönes Wochenende.

Gruß

Stefan Volkwein


----------

