我的查询看起来像这样。
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中执行。
答案 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;