안녕하세요 오라클 업데이트 쿼리 질문드려요~
특정 테이블의 일련번호 컬럼을 업데이트 하려고 하는데요
예를들면 테이블A의 컬럼이
no1 | no2 | date | model
1 | 001 | 20130101 | A
1 | 002 | 20130101 | A
1 | 1 | 20130102 | A
2 | 001 | 20130201 | B
2 | 002 | 20130201 | B
2 | 1 | 20130201 | B
2 | 2 | 20130201 | C
3 | 001 | 20130201 | B
3 | 1 | 20130201 | C
이런식으로 키가 두개이고 1번키가 no1, 2번키가 no2 이런식으로
no1이 1이고 no2가 001~005까지 있어야 하는데 그중에 잘못등록된 번호가 1 이나 2처럼 세자리숫자가
아닌데이터가 있습니다. 그래서 몇천건이 되는 데이터를 한번에 업데이트 하려고 하는데
001, 002, 003, 004, 5 이런식으로 자릿수만 005로 바꾸면 되는 데이터도 있고
001, 002, 1, 2, 이런식으로 자릿수를 늘리면 001이 2개 되고 002가 2개 되어서 중복이 되기때문에
업데이트가 힘드네요
랭크함수를 써서 아예 번호를 재부여 하려고 하는데
UPDATE table1 SET (no2) = (
SELECT LPAD(RANK () OVER (PARTITION BY no1 ORDER BY 컬럼1, 컬럼2, TO_CHAR(ROWNUM)),3,'0')
FROM table1)
WHERE no1 IN ( '1','2','3')
이렇게 하면 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.
라고 안됩니다.
이유는 한건당 1개씩 업데이트가 되어야는데 한건에 001,002,003 등 여러개가 나와서 그렇겠죠?
그럼 001만 나오도록 해야하는데 어떻게 해야되는지를 모르겠네요.................ㅠ
질문이 이해하기 힘들죠? 저도 질문을 올리다보니 횡설수설이 되어버렸네요..
어쨌든 위에 있는 테이블의 값이
no1 | no2 | date | model
1 | 001 | 20130101 | A
1 | 002 | 20130101 | A
1 | 003 | 20130102 | A
2 | 001 | 20130201 | B
2 | 002 | 20130201 | B
2 | 003 | 20130201 | B
2 | 004 | 20130201 | C
3 | 001 | 20130201 | B
3 | 002 | 20130201 | C
이런식으로 바껴야되요~ no1은 몇천건있고 no1에 따라서 no2의 값은 적게는 한두개 많게는 몇십개씩
있구요~
오라클 쿼리 잘아시는 분께서는 답변 부탁드려요~ |