2016-09-21 156 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;