ORACLE SQL - Case ... When NULL Then ... macht er nicht

Qwertzuiop

Grünschnabel
Hallo Leute,

Ich habe 2 Spalten eine mit geplanten 2012 Einkommen und eine mit erreichten 2011 Einkommen in einer dritten Spalte will ich mir den geplanten Wachtum berechnen und ein "%"-Zeichen dahiter setzen. Wenn mal kein erreichtes 2011 Einkommen vorhanden ist, dann sollte die Abfrage auch in der Berechnung nichts reinschreiben. Bei mir steht aber in solchen Zeilen immer noch das drangehängte "%", was da eigentlich nicht hingehört.

das ist mein Code:

Code:
select fy11_revenue 2011, 
       fy12_revenue 2012,
       case fy11_revenue
           when null then ''
           else round(fy12_revenue*100/fy11_revenue, 2)-100 || '%' 
       end YOY_Growth
from test_null_case

Und das meine Ausgabe:

Code:
2011        2012        YOY_GROWTH
--------------------------------------------
100          200          100%
100          5000        4900%
123          1234        903,25%
2000        1000        -50%
                                %
(sorry für die schlechte Formatierung) :rolleyes:

In der letzten Zeile sollte eigentlich nichts (also NULL) stehen.

Hat jemand eine Ahnung warum?

Danke schonmal fürs Lesten
Qwertzuiop
 
also soweit ist das noch weiß, kannst du in diene berechnete spalte SQL code schreiben die dann ausgerechnet wird....

oder du baust dir eine view mit der das auf jeden fall super geht.
 
Hi Blachhawk,

wenn ich eine View baue, hab ich dann nicht das selbe problem wie mit der SQL Abfrage? Ich weiß es nicht so genau, weil ich arbeite selten mit Views. Ich kenn mich da nicht so aus.

Geht das vielleicht nur mit PLSQL?

Kann ich mir eigentlich kaum vorstellen weil im Prinzip ist es nur ein ganz normaler CASE befehl:

Wenn nichsts drin steht, dann schreib auch nichts rein
wann aber ein Wert drin steht, dann berechne was und schreib das zusammen mit einem " %" rein

Danke,
Qwertzuiop
 
Versuchs mal so

SQL:
select fy11_revenue 2011, 
       fy12_revenue 2012,
       case
           when fy11_revenue is null then ''
           else round(fy12_revenue*100/fy11_revenue, 2)-100 || '%' 
       end YOY_Growth
from test_null_case
 

Neue Beiträge

Zurück