Saltar al contenido

CASE .. WHEN expresión en Oracle SQL

Solución:

Podrías usar un IN cláusula

Algo como

SELECT
  status,
  CASE
    WHEN STATUS IN('a1','a2','a3')
    THEN 'Active'
    WHEN STATUS = 'i'
    THEN 'Inactive'
    WHEN STATUS = 't'
    THEN 'Terminated'
  END AS STATUSTEXT
FROM
  STATUS

Eche un vistazo a esta demostración

DEMO de SQL Fiddle

Puede reescribirlo para usar la condición ELSE de un CASE:

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

Por supuesto…

select case substr(status,1,1) -- you're only interested in the first character.
            when 'a' then 'Active'
            when 'i' then 'Inactive'
            when 't' then 'Terminated'
       end as statustext
  from stage.tst

Sin embargo, hay algunas cosas preocupantes sobre este esquema. En primer lugar, si tiene una columna que significa algo, agregar un número al final no es necesariamente la mejor manera de hacerlo. Además, dependiendo del número de estado que tenga, es posible que desee considerar convertir esta columna en una clave externa para una tabla separada.


Según su comentario, definitivamente desea convertir esto en una clave externa. Por ejemplo

create table statuses ( -- Not a good table name :-)
    status varchar2(10)
  , description varchar2(10)
  , constraint pk_statuses primary key (status)
    )

create table tst (
    id number
  , status varchar2(10)
  , constraint pk_tst primary key (id)
  , constraint fk_tst foreign key (status) references statuses (status)
    )

Su consulta se convierte en

select a.status, b.description
  from tst a
  left outer join statuses b
    on a.status = b.status

Aquí hay un violín SQL para demostrar.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *