2016-09-21 8 views
0

私はこのようなクエリを持っています。データのwhere節をクエリのwhen節から返す方法

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

従業員の給与が5000未満とdate2のであれば、彼の給料は今、5000よりも大きい場合はここで私は私はこのクエリつまりショーから受けていた日に別のフィルタを適用したい日付1列の値を印刷しています返された日付が過去7日間のレコードのみ。私はby節で "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;