SQL) WHERE절의 CASE 이용에 관해 질문드립니다. 0 2 1,212

by 토로 [SQL Query] WHERE CASE INSERT INTO [2020.12.24 13:46:26]


안녕하세요. 복습하려고 쿼리 문제를 만들어 보고 있습니다. 근속년수에 맞춰 VACATION 값을 각각 넣어주고 싶은데

생각대로 잘 안 됩니다. INSERT INTO도 오류가 뜨고 CASE로도 오류가 나서 이러지도 저러지도 못하고 있네요..

힌트라도 얻고 싶어 질문 올립니다. 어떻게 접근하면 문제를 완성시킬 수 있을까요?

 

--1
--근속년수가 10년 미만, 10년 이상 20년 이하, 20년 이상 30년 이하로 그룹을 나누어 유급 휴가를 주려 한다.
--3일, 5일, 7일의 유급 휴가일(VACATION)을 테이블에 추가하여 사원명, 근속년수, 유급 휴가일을 조회하라.

ALTER TABLE EMPLOYEE 
ADD VACATION VARCHAR(15);

SELECT EXTRACT(YEAR FROM SYSDATE )- EXTRACT(YEAR FROM HIRE_DATE)  근속년수,  VACATION "유급 휴가일"
FROM EMPLOYEE
WHERE 
    CASE WHEN 근속년수 < 10 THEN VACATION '3일' 
    CASE WHEN 근속년수 BETWEEN 10 AND 20 THEN VACATION '5일' 
    END

 

by 마농 [2020.12.24 14:32:16]

1. 지난번 질문에서 Select 절의 알리아스인 "근속년수" 를 Where 절에서 사용할 수 없다고 답변 했었는데요.
2. CASE 문의 사용법이 문법에 어긋나네요. THEN 절의 내용이 이상하네요.
3. CASE 문을 WHERE 절에서 사용할게 아니라 Select 절에서 사용해야죠.
4. vacation 은 문자 "3일" 형식 보다는 숫자로 하는게 좋을 듯 합니다.
5. vacation 컬럼의 값을 변경하는 것라면 Insert 가 아니라 Update 를 사용해야죠.

-- 1. 확인용 --
SELECT emp_id
     , emp_name
     , hire_date
     , TO_CHAR(sysdate, 'yyyy') - TO_CHAR(hire_date, 'yyyy') 근속년수
     , CASE WHEN TO_CHAR(sysdate, 'yyyy') - TO_CHAR(hire_date, 'yyyy') < 10 THEN 3
            WHEN TO_CHAR(sysdate, 'yyyy') - TO_CHAR(hire_date, 'yyyy') < 20 THEN 5
            ELSE 7 END vacation
  FROM employee
;
-- 2. 갱신용 --
UPDATE employee
   SET vacation
     = CASE WHEN TO_CHAR(sysdate, 'yyyy') - TO_CHAR(hire_date, 'yyyy') < 10 THEN 3
            WHEN TO_CHAR(sysdate, 'yyyy') - TO_CHAR(hire_date, 'yyyy') < 20 THEN 5
            ELSE 7 END
;
-- 일자까지 고려한 근속년수 --
SELECT emp_id
     , emp_name
     , hire_date
     , TRUNC(MONTHS_BETWEEN(TRUNC(sysdate) + 1, hire_date) / 12) 근속년수
     , CASE WHEN MONTHS_BETWEEN(TRUNC(sysdate) + 1, hire_date) / 12 < 10 THEN 3
            WHEN MONTHS_BETWEEN(TRUNC(sysdate) + 1, hire_date) / 12 < 20 THEN 5
            ELSE 7 END vacation
  FROM employee
;

 


by 토로 [2020.12.31 14:27:00]

마농님 덕분에 완성했습니다 감사합니다~ 새해 복 많이 받으셔요!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입