년도별 일련번호 생성 질문입니다. 0 3 1,115

by 푸릉이 [2018.01.10 10:17:03]


select case when substr(no,1,4) = substr(:year,1,4) then  substr(no,1,4) || '-' ||LPAD(NVL(TO_NUMBER(SUBSTR(no,6)),0)+1,5,'0') --하나증가
     else to_char(sysdate, 'yyyy') || '-' || '00001' end new_no
     from
(
      select '0221' DPTCD, '2017-00144' no from dual union all
      select '0221', '2016-00111'  no from dual union all
      select '0221', '2015-00122' no from dual union all
      select '0221', '2013-00133' no from dual union all
      select '0221', '2017-00001' no from dual
 )

짜다가 잘 안돼서 올립니다.

위에처럼 부서코드하고 일련번호가 있는데 :year 변수에 따라 하나증가된 번호를 따려고 합니다.

2015가 들어오면 2015-000123

2016이면 2016-00112

근데 이번년도 2018년도는 기존에 번호가 없어서 :year 변수에 2018을 넣으면 신규로 2018-00001 이런식으로 따려고 하는데 잘안되네요.

 

by 마농 [2018.01.10 10:38:34]
WITH t AS
(
SELECT '0221' dptcd, '2017-00144' no FROM dual
UNION ALL SELECT '0221', '2016-00111' no FROM dual
UNION ALL SELECT '0221', '2015-00122' no FROM dual
UNION ALL SELECT '0221', '2013-00133' no FROM dual
UNION ALL SELECT '0221', '2017-00001' no FROM dual
)
SELECT :year ||'-'|| LPAD(NVL(SUBSTR(MAX(no), 6) + 1, 1), 5, '0') next_no
  FROM t
 WHERE no LIKE :year || '%'
--   AND dptcd = :v_dptcd  -- 부서 조건 필요여부 검토
;

 


by 푸릉이 [2018.01.10 10:50:07]

오아~ 고맙습니다.


by 삐르짱 [2018.01.10 10:49:36]
 SELECT :year || '-' || LPAD((CAST(NVL(SUBSTR(MAX(NO), 6), '00000') AS NUMBER) + 1), 5, '0') AS NO
   FROM (SELECT '0221' DPTCD, '2017-00144' NO FROM DUAL UNION ALL
         SELECT '0221'      , '2016-00111' NO FROM DUAL UNION ALL
         SELECT '0221'      , '2015-00122' NO FROM DUAL UNION ALL
         SELECT '0221'      , '2013-00133' NO FROM DUAL UNION ALL
         SELECT '0221'      , '2017-00001' NO FROM DUAL
     )
 WHERE NO LIKE :year || '%' 

 

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