Avatar billede johandysatan Novice
24. august 2016 - 16:06 Der er 9 kommentarer og
1 løsning

Case When IS NULL THEN

Hej

Når jeg forsøger at lave nedenstående kald til vores Oracle database får jeg en fejl. Hvis jeg fjerne den første WHEN klausul virker min CASE.

Hvordan bruger man IS NULL korrekt i en CASE statement - hvis man overhovedet kan.

  CASE ELEV.AFAR_ID
WHEN  IS NULL THEN 'Stadig indskrevet'
WHEN 6 THEN 'Ikke påbegyndt'
WHEN 14 THEN 'Ikke påbegyndt'
WHEN 10 THEN 'Fuldført'
WHEN 11 THEN 'Fuldført'
WHEN 12 THEN 'Fuldført'
WHEN 13 THEN 'Fuldført'
ELSE 'Frafald'
  END as Studiestatus,

På forhånd tak.
Avatar billede arne_v Ekspert
24. august 2016 - 16:10 #1
Hvad med:

CASE
WHEN  ELEV.AFAR_ID IS NULL THEN 'Stadig indskrevet'
WHEN ELEV.AFAR_ID = 6 THEN 'Ikke påbegyndt'
WHEN ELEV.AFAR_ID = 14 THEN 'Ikke påbegyndt'
WHEN ELEV.AFAR_ID = 10 THEN 'Fuldført'
WHEN ELEV.AFAR_ID = 11 THEN 'Fuldført'
WHEN ELEV.AFAR_ID = 12 THEN 'Fuldført'
WHEN ELEV.AFAR_ID = 13 THEN 'Fuldført'
ELSE 'Frafald'
  END as Studiestatus,
Avatar billede arne_v Ekspert
24. august 2016 - 16:13 #2
CASE ELEV.AFAR_ID
WHEN  IS NULL THEN 'Stadig indskrevet'
WHEN 6 THEN 'Ikke påbegyndt'
...

er vel en kort form for:

CASE
WHEN  ELEV.AFAR_ID = IS NULL THEN 'Stadig indskrevet'
WHEN ELEV.AFAR_ID = 6 THEN 'Ikke påbegyndt'
...

som ikke skal virke.
Avatar billede claes57 Ekspert
24. august 2016 - 19:52 #3
jeg ville køre is null udenfor case, i stil med
if ELEV.AFAR_ID IS NULL THEN
else
  case... osv
end if
Avatar billede arne_v Ekspert
24. august 2016 - 20:02 #4
Kan man bruge IF i en expression i Oracle SQL?
Avatar billede claes57 Ekspert
24. august 2016 - 20:23 #5
Ok, det er overset. Den type bør sorteres fra før kald.
Avatar billede johandysatan Novice
25. august 2016 - 08:32 #6
Sådan! Tusind tak for hjælpen arne_v
Avatar billede gnoname Praktikant
27. august 2016 - 10:25 #7
CASE
WHEN ELEV.AFAR_ID IN (6, 14) THEN 'Ikke påbegyndt'
WHEN ELEV.AFAR_ID IN (10, 11, 12, 13) THEN 'Fuldført'
ELSE NVL2(ELEV.AFAR_ID,'Frafald','Stadig indskrevet')
END as Studiestatus

ville måske være lidt mere i Oracle stil :-)
Avatar billede johandysatan Novice
28. august 2016 - 11:33 #8
@Gnoname ja det ser lidt mere lækkert ud. Er der en performance-mæssig fordel ved at bruge de funktioner?
Avatar billede arne_v Ekspert
28. august 2016 - 14:33 #9
Hvis man nu anlaegger betragtningen at laesbarhed af kode er det vigtigste, saa er brugen af IN helt oplagt en fordel, mens jeg ikke synes af NLVL2 goer koden en tjeneste idet den i.s.f. en logisk konstruktion CASE bruger CASE og NLVL2.
Avatar billede gnoname Praktikant
28. august 2016 - 14:50 #10
@arne_v : ja, du har ret; men det er jo en smagssag.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester