제가 고민하다가 오라클클럽의 고수님들은 더 좋은 답변이 나올꺼 같아 이렇게 질문 드립니다. INSERT INTO TEST1 SELECT SEQ1 ,(ROW_NUMBER() OVER ( PARITION BY SEQ1 ORDER BY DATE ) - 1 ) AS NUM
이렇게 인서트 하는 두개의 컬럼이 있는데
쿼리를 두번 돌려서
이미 SEQ1 이 있으면 기존 NUM + 1 을 하고 싶습니다.
SEQ1 의 값이 없으면 NUM 은 0 부터 시작되어야 합니다.
by 전창환
[2013.06.25 17:39:58]
잘 이해가 안가네요?? 있으면 업데이트 없으면 인서트인건가요? 그렇다면 Merge문을 사용하세요.
by 손님
[2013.06.25 17:42:53]
설명이 부족해서 죄송합니다.
이미 테이블에 데이터가 있는상태이고
SEQ1 값으로 ROW_NUMBER 해서 NUM 를 만드는건데.. SEQ1 값이 테이블에 이미 있으면 NUM + 1 SEQ1 값이 테이블에 없으면 NUM 이렇게 입니다
by 마농
[2013.06.25 17:42:58]
INSERT INTO test1
SELECT seq1
, (SELECT NVL(MAX(num), 0) FROM test1)
+ ROW_NUMBER() OVER(PARITION BY seq1 ORDER BY date)
- 1 AS num
...
;
by 손님
[2013.06.25 17:53:19]
마농님 감사합니다.
INSERT INTO test1 SELECT seq1 ,(SELECT NVL(MAX(num),0) FROM test1 t WHERE t.seq1 = seq1 ) + ROW_NUMBER() OVER (PARITITION BY seq1 ORDER BY date) - 1 AS num
하면 될꺼 같습니다.
by 마농
[2013.06.25 18:23:08]
그리 하면 안됩니다. WHERE t.seq1 = seq1 이부분은 항상 참입니다. t.seq1 과 seq1 은 같은 test 테이블의 컬럼입니다. t.seq1 = x.seq1 과 같이 하셔야 합니다. 물론 서브쿼리 바깥쪽 메인쿼리 FROM 절에 알리아스 x 가 있어야 하겠지요.
by 손님
[2013.06.26 09:03:07]
네 답변 감사합니다. 마농님 말씀대로 했더니 원하는 답이 나왔습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.