2016-09-21 121 views
0

我有一个类似这样的查询。如何使用where子句从查询的when子句返回

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

在这里,我打印日期1列的值,如果员工的薪水低于5000和date2如果他的工资高于5000现在我想申请在我从该查询即显示接收的日期进一步过滤只有那些返回日期的记录是在过去7天内。我可以按子句顺序使用“app”同义词,但是当我尝试在where子句中使用它时,它会引发编译时错误。如何应用此过滤器。

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

回答

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; 
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;