database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40406 게시물 읽기
No. 40406
오라클 업데이트 쿼리 질문드려요 ㅠㅠ
작성자
도토리(dododori)
작성일
2014-03-17 17:36
조회수
7,740

안녕하세요 오라클 업데이트 쿼리 질문드려요~

 
특정 테이블의 일련번호 컬럼을 업데이트 하려고 하는데요
 
예를들면 테이블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의 값은 적게는 한두개 많게는 몇십개씩
있구요~ 
 
오라클 쿼리 잘아시는 분께서는 답변 부탁드려요~
이 글에 대한 댓글이 총 2건 있습니다.

MERGE INTO table1 a
USING
(
SELECT ROWID rid
     , LPAD(ROW_NUMBER() OVER(PARTITION BY no1 ORDER BY no2), 3, '0') no3
  FROM table1
) b
ON (a.ROWID = b.rid)
WHEN MATCHED THEN
UPDATE SET no2 = b.no3
;

마농(manon94)님이 2014-03-18 08:42에 작성한 댓글입니다.

 오 마농님 정말 감사드려요!! 능력자시네요 

다시한번 감사드립니다. 

도토리님이 2014-03-20 10:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40410오라클 11g 서버이전
설재형
2014-03-21
6642
40409오라클 시간포함여부 쿼리 도와주세요. [2]
초보
2014-03-21
7058
40407질문 드립니다. [2]
야간비행
2014-03-18
6775
40406오라클 업데이트 쿼리 질문드려요 ㅠㅠ [2]
도토리
2014-03-17
7740
40405권한주는 방법을 알려주세요~ [1]
궁금이
2014-03-13
6683
40402안녕하십니까? ROLLUP 관련해서 문의드립니다. [2]
황인준
2014-03-13
7751
40400where rownum <= 10 order by crt_date desc 문의 [1]
이성근
2014-03-10
6350
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다