как использовать предложение where для возврата данных из предложения when запроса

У меня есть запрос, который выглядит примерно так.

select case 
           when salary<5000
             then date1
           else date2
       end "app"
from employees
order by app desc;

Здесь я печатаю значение столбца date1, если зарплата сотрудника меньше 5000, и date2, если его зарплата больше 5000. Теперь я хочу применить дополнительный фильтр к дате, которую я получаю из этого запроса, т.е. показывать только те записи, где возвращенная дата за последние 7 дней. Я могу использовать синоним «приложение» в порядке предложения, но когда я пытаюсь использовать его в предложении where, возникает ошибка времени компиляции. Как можно применить этот фильтр.

Примечание: этот запрос должен выполняться в оракуле.


person honey preet    schedule 21.09.2016    source источник


Ответы (2)


Вы можете использовать все выражение в предложении where

SELECT CASE WHEN salary < 5000 THEN date1 ELSE date2 END "app" FROM employees
WHERE  CASE WHEN salary < 5000 THEN date1 ELSE date2 END >= SYSDATE - 7
ORDER  BY "app" DESC;

или используйте исходный запрос в качестве подзапроса:

SELECT "app"
FROM   (SELECT CASE WHEN salary < 5000 THEN date1 ELSE date2 END "app" FROM employees)
WHERE  "app" >= SYSDATE - 7
ORDER  BY "app" DESC;
person Marcin Wroblewski    schedule 21.09.2016

Вы можете отфильтровать результат, используя where

select 
   case when salary<5000 then date1 else date2 end "app" 
from employees 
where case when salary<5000 then date1 else date2 end   >= sysdate -7
order by app desc;
person scaisEdge    schedule 21.09.2016