2016-09-21 2 views
0

다음과 같은 쿼리가 있습니다. 자신의 월급보다 큰 5000 지금 내가이 쿼리 즉 쇼에서 수신하고있는 일에 추가 필터를 적용 할 경우 직원의 급여 미만 5000 DATE2 인 경우 다음where 절을 사용하여 쿼리의 when 절에서 데이터를 반환하는 방법

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

나는 날짜 1 열의 값을 인쇄하고 반환 된 날짜가 최근 7 일 이내 인 레코드 만 by 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; 
관련 문제