쿼리문 질문 드립니다. 0 6 1,040

by 손님 [SQL Query] 쿼리 [2012.04.03 23:25:10]


환경은 오라클 9i 이고요,,,

T_COM (공통테이블)
T_GROUP    T_CODE     T_NAME       T_ORDER(새로만든컬럼)
1000            01               서울             1
1000            02               경기             2
1000            03               강원             3
1000            04               제주             4
2000            01               SK               1
2000            02               LG               2
2000            03               KT               3

위와 같은 공통 테이블이 있습니다.
물론 데이타는 훨씬 많습니다.
컬럼에 보시면, T_ORDER 컬럼을 새로 만들었습니다.
기존에 정렬을 T_CODE 로 했는데, 정렬 컬럼을 새로만들어서  T_ORDER 로 하려 합니다.
한번에 테이블 전체 T_ORDER 컬럼에 업데이트를 하고 싶습니다. (데이타는 위와같은 방식으로요..)
정렬은 당연히 기존 T_CODE 순으로 하구요..

이런 저런 쿼리 를 해 봤는데, 안되네요 ㅠ
쿼리 어떻게 해야 할까요???


by 마농 [2012.04.04 07:59:46]
UPDATE t_com
   SET t_order = t_code
;

by 손님 [2012.04.04 08:46:05]
마농님..답변감사드립니다.
 근데요, t_code 는 값이 01,02,03... 이런식으로 있고요, t_order 는 값을 1,2,3, 이렇게 주려 합니다. rownum 으로요..그

by 마농 [2012.04.04 09:04:41]

t_order 컬럼을 Number 타입으로 생성하셨다면. 그대로 넣으시면 됩니다.

by 손님 [2012.04.04 09:09:36]
예 맞습니다.
근데요, t_code 의 값이 A01, B01, C01 이러한 식으로도 되어져 있습니다.
그래서  t_code  의 정렬순서대로 T_ORDER 에 넣고 싶어서요.

by 부쉬맨 [2012.04.04 09:44:33]

t_code 의 정보가 t_order에 들어가겠죠.
정렬순서가 중요해보이지않네요.


 

 
UPDATE t_com
   SET t_order = replace(t_code ,'0','')


by 마농 [2012.04.04 10:56:19]
MERGE INTO t_com a
USING
(
SELECT t_group, t_code, t_name
     , ROW_NUMBER() OVER(PARTITION BY t_group ORDER BY t_code) t_order
  FROM t_com
) b
ON (a.t_group = b.t_group AND a.t_code = b.t_code)
WHEN MATCHED THEN
UPDATE SET t_order = b.t_order
WHEN NOT MATCHED THEN
INSERT VALUES(b.t_group, b.t_code, b.t_name, b.t_order
;
질문하실때 예시자료를 확실히 해주시면 멀리 돌아가지 않고 바로 답이 나올 수도 있었겠네요.
일단 USING 절에 사용한 쿼리를 근간으로 Update 하시면 되븐데.
서브쿼리 방식으로 업데이트 하면 대용량의 경우 속도 문제가 발생할 수 있습니다.
그래서 Merge 구문을 제시해 드립니다.
10g 의 경우엔 not match 구문이 필요 없지만
9i에서는 빼면 에러나므로 에러 안나도록 형식적으로 넣어 준것입니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입