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)