좋은 하루 입니다. (불금이기도 하고요 ㅋㅋ)
쿼리 고수 님 아래 쿼리에 대해서 조언을 부탁 드립니다.
select * from tab1;
-- 사전 전제 조건
-- 1. USER_COL_COMMENTS 에 컬럼명이 등록되었다는 가정
-- 2. 컬럼명은 동적임.
col1 clo2 col3 .... colN
순번 성함 출생지역 .... N
--------------------------------------------------------
1 홍길동 서울
2. 구혜선 서울
......
---------------------------------------------------------
쿼리로 하려면 우선 고정개수의 열과 고정값만 가능합니다.
가변으로 적용하려면 동적으로 프로그래밍해야 합니다.
UNION 으로 하는데도 한계가 있습니다.
모든 컬럼이 varchar 는 아니겟죠? date 나 number 은 varchar 로 치환해줘야 합니다.
즉, SELECT * 는 불가능하고 각각의 컬럼은 형변환하여 기술해줘야 합니다.
정확하게 어디에 어떻게 적용하는 것인가요?
그냥 엑셀 자료 추출용인지? 조회 화면 프로그램을 만들어야 하는건지?
-- 컬럼 코멘트 가로로 뿌리는 샘플 -- SELECT * FROM (SELECT a.table_name , a.column_id , NVL(b.comments, a.column_name) v FROM user_tab_columns a , user_col_comments b WHERE a.table_name = b.table_name AND a.column_name = b.column_name AND a.table_name = 'EMP' ) PIVOT (MIN(v) FOR column_id IN (1, 2, 3, 4, 5, 6, 7, 8)) ;
우선 답변 감사드리고요~
단순 컬럼하고 컬럼명하고 엑셀 자료 추출 용도입니다.
------------------------------------------------------------
헤더 물리컬럼명 / 헤더 논리컬러명
아래 쿼리 처럼은 안되는 건가요 ?
SELECT * FROM (SELECT a.table_name , a.column_id , NVL(b.comments, a.column_name) column_nm FROM user_tab_columns a , user_col_comments b WHERE a.table_name = b.table_name AND a.column_name = b.column_name AND a.table_name = :table_name ) PIVOT (MIN(v) FOR column_id IN (select listagg('''' || column_name || ''' AS "' || column_name || '"', ',') within group (order by column_id) from (select column_id, column_name from user_tab_columns where table_name = :table_name))) ;
샘플 데이터 (10 건 내외)
-------------------------------------------------------------
위와 같이 조회하려고 합니다.
다시 한번 요청드립니다.
아래와 같이 조회 되었으면 합니다.
------------------------ 헤더 정보 시작 ----------------------------
물리컬럼명 1, 물리컬럼명 2, 물리컬럼명 3 .... 물리컬럼명 N
---------------------- 헤더 정보 끝 --------------------------
---------------------- 로우 정보 시작 -------------------------
논리컬러명 1, 논리컬럼명 2, 논리컬럼명 4 .... 논리컬럼명 N
1, 1, 1
2, 1, 3
3, 1, 3
......
10, 1, 4
--------------------- 로우 정보 끝 ------------------------