Y인 칼럼명 쉽게 뽑아내기 1 8 721

by 초난강 [SQL Query] [2017.08.08 17:39:35]


칼럼 A  B  C  D  E  F  G  H  I  J  ~~~

  값   Y  Y    N  N  Y  Y  N  ~~~~

있다고 했을 때 조건절을 최대한 쓰지않고  간략하게 Y값이 들어간 칼럼을 뽑을수 있는 쿼리 없을까요? 쿼리가 길어지는 것 같아서요 ㅠ.ㅠ 고수님들의  답변 부탁드립니다.

by jkson [2017.08.08 17:44:28]

'Y' IN (A,B,C,D,E ... Z)


by 우리집아찌 [2017.08.08 18:00:07]

unpivot 으로 세로로 변환후 조건절로 풀어야 하듯이요


by jkson [2017.08.08 18:06:59]

Y값이 있는 컬럼명을 뽑는 거예요 아니면 Y값이 하나라도 있는 row를 뽑는 거예요?


by 초난강 [2017.08.09 09:21:08]

Y값이 있는 칼럼명을 뽑는겁니다.


by jkson [2017.08.09 09:29:28]

해당 테이블 전체 데이터 기준인가요? 아니면 where 절 조건이 따로 붙는 건가요?


by 초난강 [2017.08.09 09:34:00]

해당테이블전채기준입니다.ㅠ.ㅠ


by jkson [2017.08.09 09:35:20]

먼저 아찌님이 말씀하신 방법대로 해보면

with t as
(
select 'Y' a, 'N' b, null c from dual union all
select 'Y' a, 'N' b, null c from dual union all
select 'Y' a, 'N' b, null c from dual union all
select 'N' a, 'N' b, 'Y' c from dual
)
select to_char(wm_concat(distinct col)) coly
  from
  (
    select *
      from
      (
        select * 
          from t
      )
      unpivot ( val for col in (a, b, c))--Y가 들어갈 수 있는 컬럼 나열
  )
where val = 'Y'

-- 실제 적용하실 때는 with 문 지우시고

-- 아래 쿼리에서 t 자리에 해당 테이블명 적으시고 해당 컬럼을 unpivot 문에 적으시면 됩니다.


by jkson [2017.08.09 09:37:45]

다른 방법으로는..

 select to_char(nvl (wm_concat (column_name), 'no data found'))
   from (select column_name
           from all_tab_columns
          where table_name = upper ('테이블명')
            and to_number (dbms_xmlgen.getxmltype ( 'select 1 from '
                                                 || table_name
                                                 || ' where '
                                                 || column_name
                                                 || ' = ''Y'' and rownum = 1'
                                                  ).extract ('//text()')
                          ) = 1
           order by column_name);

테이블에서 컬럼별로 Y인 값 1개만 찾기 때문에 이게 더 빠를 수도 있을 것 같은데 테스트해보세요.

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