SELECT
TYPE
, major
, grade
, regexp_substr( con1, '[^:]+', 1, 2 ) con1
, regexp_substr( con2, '[^:]+', 1, 2 ) con2
, regexp_substr( con3, '[^:]+', 1, 2 ) con3
, regexp_substr( con4, '[^:]+', 1, 2 ) con4
, regexp_substr( con5, '[^:]+', 1, 2 ) con5
FROM
(
SELECT
TYPE
, major
, grade
, regexp_substr( con, '[^/]+', 1, 1 ) con1
, regexp_substr( con, '[^/]+', 1, 2 ) con2
, regexp_substr( con, '[^/]+', 1, 3 ) con3
, regexp_substr( con, '[^/]+', 1, 4 ) con4
, regexp_substr( con, '[^/]+', 1, 5 ) con5
FROM
(
SELECT
'시작' type
, '공학' major
, '1' grade
, 'c1:v1/c2:v2/c3:v3/c4:v4/c5:v5' con
FROM
dual
)
)
위 내용은 제가 여기저기 참고하여 만들어본 쿼리 입니다.
con 컬럼의 '/' 기호는 항목의 구분이며, ':' 기호의 앞에 값은 combo id, 뒤는 값은 combo value 입니다.
con 에 해당되는 컬럼이 40개 가까이 되어 이런식으로 데이터를 관리하고자 하는데요
마지막 결과 출력하는 부분 컬럼에서 con1, con2 를 c1, c2 이런식으로 조회된 결과로 별칭을 줄수는 없는건가요?
그리고, 혹시 이런식으로 con 컬럼과 같이 40개 가량 컬럼이 필요한 경우 데이터 관리는 어떤 방식으로 하면 효율적으로 할수 있는지 고수님들 조언 부탁드리겠습니다.
정규화 관점에서 보면 별도 테이블로 빼 내는 것이 좋을 듯 합니다.
(키(type, major, grade), seq(순서가 중요한 경우 필요), combo_id, combo_value) 형태로 만드는게 좋습니다.
자료 입/출력을 어떻게 할 것인지에 따라서 정규화를 따를지? 반정규화를 시도할 지?
반정규화를 한다면? 어떤 형태가 입출력 하기에 편리한지? 를 따져보면 되구요.
컬럼 의 개수나 별칭은 정적 쿼리만 가지고서는 가변으로 조정할 수 없습니다.
동적 쿼리를 이용해야 합니다.
정적 쿼리만 이용하려면 여러가지 변수를 생각해야 합니다.
개수가 40개 고정인가요? 아니면 가변인가요?
combo id 는 C1, C2, ~, C40 고정인가요? 아니면 가변인가요?