2014-01-19 2 views
0

이 오라클 데이터베이스 시스템에서 작업 중이므로 다음을 수행해야합니다. 모든 직원의 채용 날짜에 따라 다음과 같이 급여가 증가했습니다. (하나의 SQL 문 사용) 10 % 급여 직원은 직원 1996업데이트시 oracle의 합계 및 조건

전에 고용 된 경우 직원 1997 2000 4 % 급여 증가 사이에 고용 된 경우 2001 7 % 급여 증가 후 고용하고 난 다음 코드를 사용할 경우 증가

update employee set salary = case 
when hire_date>'1-1-2001' then salary=salary+salary*0.1 
when hire_date between ('1-1-1997','1-1-2000') then salary=salary+salary*0.07 
when hire_date < '1-1-1996' then salary=salary+salary*0.04 
end 

무엇이 잘못 되었습니까? 그게 ???

답변

1

시도 :

update stackoverflow_employee set salary = case 
when hire_date>'1-Jan-2001' then salary+salary*0.1 
when hire_date between ('1-Jan-1997') AND ('1-Jan-2000') then salary+salary*0.07 
when hire_date < '1-Jan-1996' then salary+salary*0.04 
end 

기억해야 할 : X 및 X

  • 날짜 형식 사이의 운영자 사이의

    1. 올바른 사용을 1 월 2012
    2. 사용하는 동안입니다 SET salary = 'YOUR case statements', 사례와 함께 salary = salary + salary * 0.04를 사용하지 마십시오.

    희망 지금 쿼리 내가이로 작성합니다 :)

  • +0

    대단히 감사합니다. 연산자 구문 사이에 누락되었지만 쿼리가 여전히 작동하지 않습니다. ORA-01407 : "이상한"오류 ("직원". "구두")를 업데이트 할 수 없습니다 !! –

    +0

    'salary를 기존 급여 값 –

    +0

    으로 설정하려면'when ... else salary end'를 사용하십시오. 미안하지만 stackoverflow_employee를 첫 번째 줄에 테이블 이름으로 썼습니다. 직원에게 변경하거나 테이블의 실제 이름을 변경하십시오. .. – Abhishek

    0

    하고있다 :이 salary =와 펑키 between 절에 명백한 문제를 해결

    update employee 
        set salary = (salary * (case when hire_date >= '2001-01-01' then 1.10 
               when hire_date >= '1997-01-01' then 1.07 
               else 1.04 
              end) 
           ); 
    

    . 그것은 또한 case 진술로 그곳에있을 필요가있는 논리 - 증가량을 이동시킵니다. Tt는 case 문이 첫 번째 일치 항목을 반환한다는 사실을 이용하여 between을 제거합니다. 마지막으로 ISO 표준 날짜 형식을 사용합니다.

    관련 문제