셀렉하고 나온 데이터를 컬럼으로 설정할수 있나요?? 0 3 1,846

by ReLight [Oracle 기초] 로우 컬럼변환 동적컬럼 가변컬럼 [2014.10.16 17:31:21]


안녕하세요. DB 공부하고 있는 학생입니다.

다름아니라 이번에 공부를하면서 쿼리를 짜보고 있거든요.

근데 좀 막히는게 있어서 도움을 받고자 질문 올립니다...

 

우선 쿼리는 부서별 비품의갯수 통계를 구하려고 하는데요.

비품기준으로 부서마다 몇개를 가지고 있는지를 구하면되는데

중요한건 부서도 가변적이라는 점입니다..

 

예를들어 영업팀의 펜,종이의 갯수를 구하는거라고하면

세부부서    상위부서

     영업1      영업팀

     영업2      영업팀

     영업3      영업팀

이렇게 나온 영업1,2,3이 다시 컬럼이 되어서

비품이름   영업1   영업2   영업3

펜                  1         5         4

종이               3         7         3

이렇게 나와야되거든요.

 

지금 막히는게 일단 저렇게 동적 컬럼이 만들어지는것도 구현이 되는건지도 의문점이고요..

저렇게 동적으로 만들어진 컬럼을 검색대상으로 정할수 있는지도 의문점이거든요...

저걸 어떻게 구현해야될까요...

도움 주셨으면 합니다..

by 마농 [2014.10.17 09:49:41]
SELECT item
     , SUM(DECODE(dept, '영업1', cnt)) 영업1
     , SUM(DECODE(dept, '영업2', cnt)) 영업2
     , SUM(DECODE(dept, '영업3', cnt)) 영업3
  FROM t
 GROUP BY item
;

우선 정적쿼리는 위와 같습니다.
동적쿼리란 동적으로 쿼리문장을 완성하는 것을 말합니다.
쿼리 자체로 해결되는게 아니라 프로그램과 연동되어야 하는 부분입니다.
프로그램 언어에서 1차 쿼리를 통해 부서를 가져오고
루프를 돌려가면서 SUM(DECODE()) 부분을 쿼리에 추가해 나가시면 됩니다.
http://www.gurubee.net/article/19612


by ReLight [2014.10.20 09:32:31]

답변 감사합니다.^^

저도 도저히 가능성이 없는거 같아서 일단 데이터 출력은 전체 부서를 기준으로 다 읽어서 갯수를 뽑고 이후에 플래그를 줘서 걸러내는걸로 하려고 합니다...

근데 이렇게 하면 부서 전체이다보니까 데이터가 너무 많아 질꺼같아서 다른방법이 있나 해서 찾아보고 있었어요..^^


by 마농 [2014.10.20 10:51:25]

전체 부서가 다 필요한게 아니라면 필요한 부서만 읽으면 됩니다.

필요한 부서만 읽는 것은 조건절(Where)을 통해 제어하시면 됩니다. 

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