INSERT 시퀀스 문제 0 5 1,042

by 정충보국 [2017.08.24 16:03:52]


아래쿼리같이 A그룹에 대해 B의 max시퀀스를 + 1해서 INSERT시킬려고 하고 있는데

초기 데이터는에는 A값이 없기 때문에 INSERT시 B값에 NULL이 들어가네요. 

초기 데이터인경우 B값이 1로  세팅되며 그 이후에 계속 MAX(SEQ)가 생성되고록 할 수는 없나요?

select nvl(nvl(B, max(B) OVER(PARTITION BY A) + ROW_NUMBER() 
OVER(PARTITION BY A ORDER BY A)),'0') + 1
from T

by 우리집아찌 [2017.08.24 16:14:42]
/*  이걸 원하시는지 잘 모르겠네요.. */

WITH T AS (
SELECT '' A ,'' B FROM DUAL
)

SELECT NVL(MAX(B) OVER(PARTITION BY A),0)+1
  FROM T

 


by jkson [2017.08.24 16:18:46]

왜 윈도우 함수를 쓰신 건지 모르겠네요. max값을 찾아서 한 번에 한 건만 insert하는 것 아닌가요?


by 마농 [2017.08.24 16:22:34]

사용하고자 하는 구문이...
  - 1. insert ~ select 인가요?
  - 2. insert ~ values 인가요?
1번 이라면? max(b) 가 널이 나올리가 없구요.
2번 이라면? 분석함수 over 를 사용할 이유가 없는데요?


by 정충보국 [2017.08.24 16:31:36]

2. insert ~ values 이고요. 그러면 A값에 대한 B의 시퀀스 증가를 어떻게 해야 하나요?


by jkson [2017.08.24 16:36:58]

한 건 입력하는 경우라면 해당 a 값의 max 값을 가지고 와서 1을 더해야겠네요.

select nvl(max(b),0) + 1
from t
where a = :a

 

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