쿼리 조언 부탁 드립니다. 0 3 775

by jps [PL/SQL] [2019.12.05 15:02:03]


아래와 같은 상황에서 더 나은 방법이 무엇인지 궁금하여 질문 드립니다.

db는 오라클, 월정산 시스템이고 프로시져 실행 시점에 상관없이 같은 결과를 출력 해야 합니다.

그래서 로직 변경시 기존에는

insert into 결과테이블
select case when 정산월 <= 201812 then sal + 1000 else sal + 2000 end as bonus
from t1
where yyyymm = 정산월;

이런식으로 정산월을 기준으로 case 문을 사용하여 처리했었는데 문제점이

변경이 일어날수록 점점 쿼리가 복잡해지고, 실제쿼리는 예시보다 case 로 처리해야되는 부분들이 많아서 더 좋은 방법이 없을까 생각해 봤습니다.

insert into 결과테이블
select sal + 1000 as bonus
from t1
where yyyymm = 정산월
and 정산월 <= 201812
;

insert into 결과테이블
select sal + 2000 as bonus
from t1
where yyyymm = 정산월
and 정산월 >= 201901
;

이렇게 나누는것,

그리고 버전별로 프로시져를 만들어서 해당 정산월에 맞는 프로시져를 호출 하는것.

이정도 생각 해봤는데 둘 다 썩 좋은 방법은 아닌것 같아 질문 드립니다.

어떤식으로 처리하는게 좋은 방법일까요?

by 우리집아찌 [2019.12.05 15:18:25]

월별로 데이터가 처리된다면

월별 태이블 ( 월 , 보나스 추가값 ) 등을 만들어서

join하는 방법도 있습니다


by 마농 [2019.12.05 15:21:59]
-- 쿼리에서 한방에 다 하려고 하지 마시고 변수를 따로 빼세요.
IF 정산월 <= 201812 THEN
    v_xxx := 1000;
ELSE
    v_xxx := 2000;
END IF;
INSERT INTO 결과테이블
SELECT sal + v_xxx AS bonus
  FROM t1
 WHERE yyyymm = 정산월
;

 


by jps [2019.12.06 11:01:43]

답변 감사합니다!!

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