Использование условной логики в выражении SELECT
Задача
Требуется осуществить операцию IF-ELSE в выражении SELECT. Например, необходимо сформировать результирующее множество, в котором для служащих, получающих $2000 или менее, возвращается значение “UNDERPAID” (низкооплачиваемый), для служащих, получающих $4000 или более, возвращается значение “OVERPAID” (высокооплачиваемый), и для служащи, заработная плата которых находится между $2000 и $4000, возвращается значение “OK”.
Решение
Для осуществления услввной логики непосредственно в выражении SELECT используйте выражение CASE:
select e.ename, e.sal,
case when e.sal <= 2000 then 'UNDERPAID'
when e.sal >= 4000 then 'OVERPAID'
else 'OK'
end as status
from emp e
ENAME SAL STATUS
---------- --- ---------
SMITH 800 UNDERPAID
ALLEN 1600 UNDERPAID
WARD 1250 UNDERPAID
JONES 2975 OK
MARTIN 1250 UNDERPAID
BLAKE 2850 OK
CLARK 2450 OK
SCOTT 3000 OK
KING 5000 OVERPAID
TURNER 1500 UNDERPAID
ADAMS 1100 UNDERPAID
JAMES 950 UNDERPAID
FORD 3000 OK
MILLER 1300 UNDERPAID
14 rows selected
Обсуждение
Выражение CASE позволяет применять условную логику к возвращаемым в результате запроса значениям. В целях формирования более удобного для чтения результирующего множества, можно указать псевдоним для выражения CASE. В данном решении результаты выразения CASE выводятся в столбце под псевдонимом STATUS. Конструкция ELSE является необязательной. Если ELSE опущено, выражение CASE возвратит NULL для любой не удовлетворяющей условию строки.