86 votes

Expression CASE .. WHEN dans Oracle SQL

J'ai un tableau avec 1 colonne et les données suivantes

Status
a1
i
t
a2
a3

Je veux afficher le résultat suivant dans ma requête de sélection

Status| STATUSTEXT
a1    | Active
i     | Inactive
t     | Terminated
a2    | Active
a3    | Active

Un moyen auquel j'ai pensé est l'utilisation d'une expression Switch When dans une requête de sélection.

SELECT
status,
CASE status 
WHEN 'a1' THEN 'Active'
WHEN 'a2' THEN 'Active'
WHEN 'a3' THEN 'Active'
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
END AS StatusText
FROM stage.tst

Y a-t-il un autre moyen de faire cela sans avoir à écrire Lorsque l'expression 3 fois pour le statut actif et l'ensemble du statut actif peut être vérifié en une seule expression ?

1voto

praveen kumar Points 23
SELECT
  STATUS,
  CASE
    WHEN STATUS IN('a1','a2','a3') 
     THEN 'Active'
    WHEN STATUS = 'i' 
     THEN 'Inactive'
    WHEN STATUS = 't'
     THEN 'Terminated'  ELSE null
  END AS STATUSTEXT
FROM
  stage.tst;

0voto

Timo Hahn Points 1231

Vous ne pouvez vérifier que le premier caractère du statut. Pour cela, vous utilisez la fonction substring.

substr(status, 1,1)

Dans votre cas, c'est du passé.

0voto

Smart Coder Points 41

La syntaxe suivante fonctionnerait :

....
where x.p_NBR =to_number(substr(y.k_str,11,5))
and x.q_nbr = 
 (case 
 when instr(substr(y.m_str,11,9),'_') = 6   then  to_number(substr(y.m_str,11,5))
 when instr(substr(y.m_str,11,9),'_') = 0   then  to_number(substr(y.m_str,11,9))
  else 
       1
  end
)

0voto

Vitor Points 1
CASE TO_CHAR(META.RHCONTRATOSFOLHA.CONTRATO)
WHEN '91' AND TO_CHAR(META.RHCONTRATOSFOLHA.UNIDADE) = '0001' THEN '91RJ'
WHEN '91' AND TO_CHAR(META.RHCONTRATOSFOLHA.UNIDADE) = '0002' THEN '91SP'
END CONTRATO,

00905. 00000 -  "missing keyword"
*Cause:    
*Action:
Erro na linha: 15 Coluna: 11

0voto

sbrbot Points 939
DECODE(SUBSTR(STATUS,1,1),'a','Active','i','Inactive','t','Terminated','N/A')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X