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 40824 게시물 읽기
No. 40824
쿼리 문의드립니다.
작성자
나랑
작성일
2015-06-09 13:26ⓒ
2015-06-09 16:39ⓜ
조회수
7,744

코드성 테이블을 이관작업을 하는데요.(INSERT INTO ~ SELECT ~)

설계가 바뀌면서 스키마가 변경이 되었는데요.

새롭게 추가된 컬럼등에 데이터를 입력할려고 하는데 잘 안되네요.

 

기존테이블 -> A_ID | B_ID | A_NM | B_NM

A_NM : 코드분류명

B_NM : 코드분류상세명

 

A_ID | B_ID | A_NM | B_NM

01 A001 이체구분 수동이체

02 A001 이체구분 자동이체

03 A001 이체구분 월2회이체

01 B001 지점별구분 동대문점

02 B001 지점별구분 서대문점

11 C001 통장구분 정기예금

12 C001 통장구분 정기적금

 

변경테이블 -> C_ID | D_ID | (B_NM)A_NM | SORT(정렬순서)

 

변경테이블에 세번째 컬럼에 위의 기존 테이블 A_NM코드분류명이 하나들어오고

그 밑으로 코드분류상세명이 들어와야 됩니다.

해당 코드분류상세명은 순번(정렬순서)가 매겨져야 하고요.

 

그리고 C_ID와 D_ID에는 재귀호출관계로 설계된형태인

공통코드 C_ID와 상위코드참조 D_ID로 구성되어 있어서 제네레이션 해야 될듯하고요.

입력형태는 아래와 같이 나와줘야 되는데 잘 안되네요~~

 

C_ID | D_ID | (B_NM)A_NM | SORT(정렬순서) | 기존테이블코드A_ID | 기존테이블코드 B_ID

------------------------------------------

001 NULL 이체구분 AA A001

00101 001 수동이체 1

00102 001 자동이체 2

002 NULL 지점별구분 BB B001

00201 002 동대문점 1

00202 002 서대문점 2

00203 002 수원점 3

 

 

이 글에 대한 댓글이 총 3건 있습니다.

원본코드가 중복되네요?

유일코드가 보여야 할 듯...

마농(manon94)님이 2015-06-09 15:49에 작성한 댓글입니다.

기존테이블에서 A_NM은 상위분류명입니다. 코드테이블이 2개로 나눠져서 관리되어지다보니 2개 테이블을 조인하면 상위분류명이 저런식으로 중복되게 나오고

있습니다. B_NM은 하위분류명이고요.... A_ID하고 B_ID는 수동으로 입력을 해도 무방할듯하여 제외해도 될듯 하고요..

변경 테이블에 C_ID와 D_ID의 코드값과 분류별 정렬순번을 입력하는게

관건이긴 하는데 잘 안되네요~~

 

유일코드는 현재 B_ID와 다른컬럼의 순번(ex. 01,02,03,12...분류내에서의 순번값)이렇게 복합키로 유일코드를 찾을수 있습니다.

------------------------------------------

이런 형태라고 보시면 됩니다.

 

A_ID | B_ID | A_NM | B_NM

 

01 A001 이체구분 수동이체

02 A001 이체구분 자동이체

03 A001 이체구분 월2회이체

01 B001 지점별구분 동대문점

02 B001 지점별구분 서대문점

11 C001 통장구분 정기예금

12 C001 통장구분 정기적금

 

나랑님이 2015-06-09 16:00에 작성한 댓글입니다.
이 댓글은 2015-06-09 16:22에 마지막으로 수정되었습니다. Edit

WITH t AS
(
SELECT 'A001' a_id, '01' b_id, '이체구분' a_nm, '수동이체' b_nm FROM dual
UNION ALL SELECT 'A001', '02', '이체구분'  , '자동이체'  FROM dual
UNION ALL SELECT 'A001', '03', '이체구분'  , '월2회이체' FROM dual
UNION ALL SELECT 'B001', '01', '지점별구분', '동대문점'  FROM dual
UNION ALL SELECT 'B001', '02', '지점별구분', '서대문점'  FROM dual
UNION ALL SELECT 'C001', '11', '통장구분'  , '정기예금'  FROM dual
UNION ALL SELECT 'C001', '12', '통장구분'  , '정기적금'  FROM dual
)
SELECT LPAD(dr, 3, '0') || LPAD(rk, 2, '0') id
     , NVL2(rk, LPAD(dr, 3, '0'), null) pid
     , NVL(b_nm, a_nm) nm
     , NVL(rk, dr) seq
     , a_id, b_id
  FROM (SELECT a_id, b_id, a_nm, b_nm
             , DENSE_RANK() OVER(ORDER BY a_id) dr
             , RANK() OVER(PARTITION BY a_id ORDER BY b_id) rk
          FROM t
        )
 GROUP BY dr, a_id, a_nm
     , ROLLUP((rk, b_id, b_nm))
 ORDER BY dr, rk NULLS FIRST
;

마농(manon94)님이 2015-06-09 18:03에 작성한 댓글입니다.
이 댓글은 2015-06-09 18:09에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
40827안녕하세요 split 속도 문제 문의드립니다.. [2]
아벨의꿈
2015-06-10
8107
40826오라클에서 처음조회할때 속도 느린 현상 해결좀... [1]
김삼
2015-06-10
7410
40825겹치는 필드가 가장 많은 로우와 카운트 찾는 쿼리 질문이요. [3]
현아범
2015-06-09
7802
40824쿼리 문의드립니다. [3]
나랑
2015-06-09
7744
40823in 절에 나열된 순서대로 정렬하기 [1]
화생방
2015-06-09
7166
40822select 버퍼 사용 안할려면 [3]
이현정
2015-06-09
7864
40821원 SQL로 재직자, 퇴사자 검색하기 [2]
매수신호
2015-06-08
6888
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다