물리컬럼 밑에 한글컬럼명을 표시할 수 있을까요? 0 6 6,268

by 블루스 [SQL Query] META QUERY SQL ORACLE [2018.10.19 09:03:52]


좋은 하루 입니다. (불금이기도 하고요 ㅋㅋ)

쿼리 고수 님 아래 쿼리에 대해서 조언을 부탁 드립니다.

 

select * from tab1;

-- 사전 전제 조건

-- 1. USER_COL_COMMENTS 에 컬럼명이 등록되었다는 가정

-- 2. 컬럼명은 동적임.

col1   clo2   col3  .... colN

순번   성함   출생지역   ....  N    
--------------------------------------------------------

1       홍길동  서울

2.      구혜선  서울

......

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

by 우리집아찌 [2018.10.19 09:17:52]

일단 일반적으로 보이는 컬럼명을 이중으로 할순없습니다.

그냥 보이기 정도라면 UNION ALL 이용해서 ROW를 한줄 더 추가해서 보여 줄수는 있습니다.

마지막으로 컬러명이 동적이라면 동적SQL 를 사용해야합니다. 쉽지는 않지요.


by 블루스 [2018.10.19 09:36:27]

UNION ALL 을 사용하여 보여줘도 상관없습니다. ^^


by 마농 [2018.10.19 10:18:52]

쿼리로 하려면 우선 고정개수의 열과 고정값만 가능합니다.
가변으로 적용하려면 동적으로 프로그래밍해야 합니다.
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))
;

 


by 블루스 [2018.10.19 13:53:58]

우선 답변 감사드리고요~

단순 컬럼하고 컬럼명하고 엑셀 자료 추출 용도입니다.

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

헤더 물리컬럼명 / 헤더 논리컬러명

아래 쿼리 처럼은 안되는 건가요 ?

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

--------------------- 로우 정보 끝 ------------------------


by 우리집아찌 [2018.10.19 14:36:16]

엑셀이면 피벗 안쓰고 CSV로 만들면 더 쉽지않나요?

그냥 구분자 두어서 처리하면 되지 않을까요?


by 마농 [2018.10.19 16:10:37]

엑셀에 붙여넣기 옵션중에 행열바꾸기 있습니다.
그냥 테이블 명세서 세로로 뿝아서 행열바꾸기로 붙여넣기 하시면 됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입