2012-02-04 5 views
1

Есть ли сжатая форма следующего утверждения?SQL-код с несколькими значениями

SELECT Name, Case StatusID WHEN 1 THEN 'Alive' WHEN 2 THEN 'Alive' WHEN 3 THEN 'Alive' WHEN 4 THEN 'Dying' ELSE 'Dead' END FROM People 

, например

CASE StatusID WHEN 1,2,3 THEN 'Alive' 

или

CASE StatusID WHEN 1 OR 2 OR 3 THEN 'Alive' 

ответ

3

В Oracle, предполагая, что statuid никогда < = 0:

SELECT Name, CASE WHEN statusid < 4 THEN 'Alive' 
        WHEN statusid = 4 THEN 'Dying' 
        ELSE 'Dead' END AS some_alias 
    FROM people 

Вы также можете использовать DECODE.

+0

фактически 'DECODE' не позволит для любого ярлыка AFAIK ... – Yahia

+0

Вы не можете использовать неравенство, но вы можете сделать DECODE (1, «Живой», 2, «Живой», 3, «Живой», 4, «Умирающий», «Мертвый»). На самом деле это может быть более компактным. – eaolson

+0

возможно - но вы должны ввести 'Alive' 3 раза ... – Yahia

4

в зависимости от БД вы используете следующий будет делать трюк

SELECT 
Name, 
Case WHEN StatusID IN (1, 2, 3) THEN 'Alive' WHEN StatusID = 4 THEN 'Dying' ELSE 'Dead' END 
FROM People