Hilfe bei einer SQL Ãœbung

Hallo,
ich arbeite mit Hora6 und dementsprechend mit einer Oracle Datenbank.

Hier mal mein Select.

SELECT SUBSTR(KZT1.JSCHM,1,4) ||'-'|| SUBSTR(KZT1.JSCHM,5) JSCHM,
       STOFFE.ANLAGE, MAX(KURZBEZ) KURZBEZ, STOFFE.ST_SCHL, MAX(TEXTK) TEXTK,
       SUM(SGEW) SGEW, SUM(IGEW) IGEW,
[B]       CASE SUM(SGEW)
       WHEN 0
       THEN NULL
       ELSE ROUND( (SUM(SGEW) - SUM(IGEW)) * 100 / SUM(SGEW), 2)
        END P_Abweichung,[/B]
       SUM(SGEW)-SUM(IGEW) Differenz,
       DECODE( AVG(SCHI), '1', 'Nachtschicht', '2', 'Fruehschicht', '3',
             'Mittagschicht', NULL, 'n/a' ) SCHI
FROM OXRU.KZT1, OXRU.STOFFE, OXRU.ANLAGENTEXTE, OXRU.STTEXT
WHERE KZT1.JSCHM = STOFFE.JSCHM
  AND STOFFE.ANLAGE = ANLAGENTEXTE.ANLAGE
  AND STOFFE.ST_SCHL = STTEXT.ST_SCHL
  AND EZDAT22 BETWEEN TO_DATE('01.01.2008 00:00:00','DD.MM.YYYY HH24:MI:SS')
                  AND TO_DATE('31.12.2008 23:59:59','DD.MM.YYYY HH24:MI:SS')
GROUP BY SUBSTR(KZT1.JSCHM,1,4) ||'-'|| SUBSTR(KZT1.JSCHM,5), STOFFE.ANLAGE, STOFFE.ST_SCHL
ORDER BY SUBSTR(KZT1.JSCHM,1,4) ||'-'|| SUBSTR(KZT1.JSCHM,5), ANLAGE, ST_SCHL

Es geht mir um den Fetten Teil.
Und zwar möchte ich in dem Case das NULL druch ‘n/a’ ersetzen.
Dann bekomme ich aber natürlich den Fehler, das er in der Berechnung einen Number Wert bekommt, er aber char haben will.
Ich habe nun den Typ bekommen, das hier die TO_char Funktion benutzen muss.
Allerdings hat das nicht geklappt. Ich weiß nich wie genau ich diese einbinden muss und an welcher Stelle genau. Hoffe ihr könnt mir helfen.
Danke im Vorraus^^

orakelt wird z.B. in Esoteriksendungen ab 21 :astonished: o Uhr, hier geht es um PostgreSQL:

test=*# select case when 0=0 then 'n/a' else 0::text end;
 case
------
 n/a
(1 row)

test=*# select case when 0=1 then 'n/a' else 0::text end;
 case
------
 0
(1 row)

Andreas

wenn es nur darum geht NULL werte durch n/a darzustellen, empfiehlt es sich COALESCE(…) zu verwenden …

SELECT ... 
   [color="Blue"][B]COALESCE([/B][/color]
       CASE SUM(SGEW)
       WHEN 0
       THEN NULL
       ELSE ROUND( (SUM(SGEW) - SUM(IGEW)) * 100 / SUM(SGEW), 2)
       END[color="#0000ff"][B], 'n.a.') [/B][/color]as P_Abweichung,
       ...

wenn der case - ausdruck NULL ist, wird ‘n.a’ ausgegeben es koennte sein, dass du den case-ausdruck innerhalb dieser fkt. in einen string casten musst - aber nur vielleicht! ich erinner mich, dass das bei Postgres und SQL-server notwendig ist, weil die typen der COALESCE parameter kompatibel sein müssen - macht ja auch sinn

in postgres wuerde das dann in etwa so aussehen

SELECT ... 
   [color="Blue"][B]COALESCE([/B][/color]
       [color="SeaGreen"]([/color]CASE SUM(SGEW)
       WHEN 0
       THEN NULL
       ELSE ROUND( (SUM(SGEW) - SUM(IGEW)) * 100 / SUM(SGEW), 2)
       END[color="#2e8b57"])::text[/color][color="#0000ff"][B], 'n.a.') [/B][/color]as P_Abweichung,
       ...

Funktioniert leider nicht…
Wie gesagt das soll mit einem TO_CHAR gehen.
Der muss irgendwie in die Berechnung rein^^

Ich bin am verzweifeln…

Was ist denn bitte daran so schwer? Dein ‘n/a’ ist ein Text, damit dieser in der selben Spalte wie auch ein berechnetes Ergebnis stehen kann, wirst Du das Ergebnis nach text casten müssen. Wie das nun konkret mit ORA geht entnimmst Du bitte der schönen Doku zu ORA, ich habe Dir ja schon gezeigt, wie es mit PostgreSQL geht, welches hier OnTopic ist.

Andreas