Задача Требуется осуществить операцию IF!ELSE в выражении SELECT. На пример, необходимо сформировать результирующее множество, в котором для служащих, получающих $2000 или менее, возвращается значение «UNDERPAID» (низкооплачиваемый), для служащих, получающих $4000 или более, возвращается значение «OVERPAID» (высокооплачиваемый), и для служащих, заработная плата которых находится между $2000 и $4000, возвращается значение «OK». Результирующее множество должно выглядеть следующим образом:
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 |
Решение Для осуществления условной логики непосредственно в выражении SELECT используйте выражение CASE:
select ename,sal, case when sal <= 2000 then 'UNDERPAID' when sal >= 4000 then 'OVERPAID' else 'OK' end as status from scott.emp;
Обсуждение Выражение CASE позволяет применять условную логику к возвращае мым в результате запроса значениям. В целях формирования более удобного для чтения результирующего множества можно указать псевдоним для выражения CASE. В данном решении результаты выражения CASE выводятся в столбце под псевдонимом STATUS. Конструкция ELSE является необязательной. Если ELSE опущено, выражение CASE возвратит NULL для любой не удовлетворяющей условию строки.
Источник: Молинаро Э. "SQL. Сборник рецептов"
|