쿼리 도움 요청 드립니다.max null 사용법 0 7 1,204

by 초봉 [SQL Query] [2019.01.04 14:09:10]


고수님들 쿼리 도와주세요 ㅜㅜ

WITH T
     AS (SELECT 'AAOS12001' AS CD FROM DUAL
         UNION ALL
         SELECT 'AAOS12002' AS CD FROM DUAL)
SELECT CD
  FROM T
  WHERE SUBSTR(CD,1,6) = 'AAOS12'

 

위의 쿼리에서 CD 값이 MAX 하여 나온 값에 AAOS12002 입니다.

AAOS12002를 끝에 002를 003으로 1 플러스 하고 싶습니다.

그리고 한가지 더 알고 싶은 것은

WHERE 절에 있는 AAOS12 파라미터가 AAOS13으로 넘어왔을때 DATA가 존재하지 않아 조회 되지 않습니다.

이런경우에는 AAOS13001 이렇게 셋팅되게 하고 싶습니다. 고수님들 도와주세요 ㅜㅜ

by 우리집아찌 [2019.01.04 14:28:13]
WITH T AS (
SELECT 'AAOS12001' AS CD FROM DUAL
 UNION ALL
 SELECT 'AAOS12002' AS CD FROM DUAL
)

SELECT 'AAOS13' || LPAD(NVL(SUBSTR(MAX(CD),7,3),0) + 1 , 3 , '0')
  FROM T
  WHERE SUBSTR(CD,1,6) = 'AAOS13'

 


by 마농 [2019.01.04 14:28:20]
WITH t AS
(
SELECT 'AAOS12001' cd FROM dual
UNION ALL SELECT 'AAOS12002' FROM dual
)
SELECT :v_prefix || LPAD(NVL(SUBSTR(MAX(cd), 7, 3) + 1, 1), 3, '0') AS next_cd
  FROM t
 WHERE cd LIKE :v_prefix || '%'
;

 


by 소주쵝오 [2019.01.04 14:40:38]
WITH T AS 
(SELECT 'AAOS12001' AS CD FROM DUAL UNION ALL
 SELECT 'AAOS12002' AS CD FROM DUAL
)
select nvl(max(str||to_char(no+1, 'fm000')), :b1||'001') as val
from (SELECT substr(cd, 1, 6) str
           , substr(cd, -3) no
      FROM T
      WHERE CD like :b1||'%'
     );

 


by 마농 [2019.01.04 14:53:48]

우리집아찌 님의 SUBSTR 조건은 인덱스를 이용하지 못하므로 LIKE 로 바꾸는 게 좋습니다.
소주쵝오 님의 MAX(str...) 방식은 MAX 쿼리를 효율적으로 사용하지 못하므로 MAX(cd)를 이용하는게 좋습니다.


by 우리집아찌 [2019.01.04 15:08:37]

핫 .. 아무생각없이 예제를 그냥 썼네요. ㅎㅎ


by 소주쵝오 [2019.01.04 15:34:30]

앗.. 조언 감사합니다~ㅎ


by 초봉 [2019.01.04 15:40:23]

도움주셔서 감사합니다.

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