CASE .. WHEN expression in Oracle SQL

前端 未结 9 867
北荒
北荒 2020-12-04 13:17

I have the table with 1 column and has following data

Status
a1
i
t
a2
a3

I want to display the following result in my select query

9条回答
  •  自闭症患者
    2020-12-04 13:36

    Of course...

    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
    

    However, there's a few worrying things about this schema. Firstly if you have a column that means something, appending a number onto the end it not necessarily the best way to go. Also, depending on the number of status' you have you might want to consider turning this column into a foreign key to a separate table.


    Based on your comment you definitely want to turn this into a foreign key. For instance

    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)
        )
    

    Your query then becomes

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

    Here's a SQL Fiddle to demonstrate.

提交回复
热议问题