如何在查询的when子句的数据返回时使用where子句

时间:2016-09-21 06:43:20

标签: oracle case-when

我的查询看起来像这样。

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

如果员工的薪水小于5000,我打印date1列的值,如果他的薪水大于5000,我打印date2。现在我想在我从这个查询收到的日期再应用一个过滤器,即只显示那些记录在哪里返回日期是过去7天。我可以在order by子句中使用“app”同义词,但是当我尝试在where子句中使用它时,它会抛出编译时错误。如何应用此过滤器。

注意:此查询将在oracle中执行。

2 个答案:

答案 0 :(得分:0)

您可以使用

过滤结果
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;

答案 1 :(得分:0)

您可以在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;