by SQL모험가 [2022.01.31 11:39:18]
oracle 9i이고
case when 사용중에 값이 반환이 되지 않아 질문드립니다.
EMP_TABLE이라는 사원테이블에서
DEPART_CODE로 해당 부서를 조회하였을때,
만약에 MAX(EMP_NO)가 존재한다면 MAX(EMP_NO) + 1 하고
존재하지 않는 다면 1을 반환하려 합니다.
다만 해당 부서의 MAX(EMP_NO)가 존재할때는 최대값 + 1이 정상적으로 반환되나
존재하지 않을때는 1이 아닌 null로 반환됩니다.
SELECT
CASE
WHEN
EXISTS (SELECT MAX(EMP_NO) FROM EMP_TABLE WHERE DEPART_CODE = '10')
THEN (SELECT MAX(EMP_NO) + 1 FROM EMP_TABLE WHERE DEPART_CODE = '10')
ELSE 1
END as EMP_NO
FROM DUAL;
잘못된 부분 알려주셨으면 합니다.
아 해결하였습니다.
SELECT MAX(EMP_NO) FROM EMP_TABLE WHERE DEPART_CODE = '10' 이 부분에서 MAX()를 빼니까 정상적으로 작동하는군요
SELECT NVL(MAX(emp_no), 0) + 1 emp_no FROM emp_table WHERE dept_code = '10' ;