가변적인 다중결과를 각각의 컬럼으로 구분해서 꺼내오기 0 4 1,619

by 짱짱 [2010.07.19 18:30:01]



사용자별로 자격증을 다중등록할수 있습니다.
현재 1개에서 최대 8개까지 등록이 되어있구요.
[사용자]  [자격증코드]
AAA     자격1
AAA     자격2
BBB     자격1
CCC     자격1
~
CCC     자격8

사용자별로 보유한 자격증 자료를 아래와같이 뽑아주려합니다....

[사용자]  [자격증1]  [자격증2]  .... [자격증8]
AAA      자격1     자격2
BBB      자격1   
CCC 자격1     자격2    .....  자격8


집합함수를 사용하려해도 생각대로 되질 않네요 .
힌트좀 주십시요. (__)
by 도가니 [2010.07.19 18:47:49]
최대 8개까지 정해져 있다면,
with t_table as (
select 'AAA' 사용자, '자격증1' license from dual union all
select 'AAA' 사용자, '자격증2' license from dual union all
select 'BBB' 사용자, '자격증1' license from dual union all
select 'CCC' 사용자, '자격증1' license from dual union all
select 'CCC' 사용자, '자격증8' license from dual
)
select 사용자,
min(decode(license,'자격증1','자격증1')) as "자격증1",
min(decode(license,'자격증2','자격증2')) as "자격증2",
min(decode(license,'자격증3','자격증3')) as "자격증3",
min(decode(license,'자격증4','자격증4')) as "자격증4",
min(decode(license,'자격증5','자격증5')) as "자격증5",
min(decode(license,'자격증6','자격증6')) as "자격증6",
min(decode(license,'자격증7','자격증7')) as "자격증7",
min(decode(license,'자격증8','자격증8')) as "자격증8"
from t_table
group by 사용자
order by 사용자;

by 짱짱 [2010.07.19 19:51:22]
도가니님 감사합니다.

근데 자격증이 8개로 정해져 있는것이 아니고, 자격증코드가 등록되어서 코드테이블과 조인해서 자격증명을 보여줘야합니다.
7개는 정해진 코드값이 있고, 1개의 특정코드는 별도로 자격증명을 입력받았습니다.

by 마농 [2010.07.20 08:03:31]
SELECT user_id
, MIN(DECODE(rn,1,license_nm)) lc_1
, MIN(DECODE(rn,2,license_nm)) lc_2
, MIN(DECODE(rn,3,license_nm)) lc_3
, MIN(DECODE(rn,4,license_nm)) lc_4
, MIN(DECODE(rn,5,license_nm)) lc_5
, MIN(DECODE(rn,6,license_nm)) lc_6
, MIN(DECODE(rn,7,license_nm)) lc_7
, MIN(DECODE(rn,8,license_nm)) lc_8
FROM
(
SELECT t.*
, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY license_cd) rn
FROM t
)
GROUP BY user_id
;

by 짱짱 [2010.07.22 14:18:09]
마농님 감사합니다.
쿼리 참조해서 잘 해결했습니다....
건강 유의 하세요~ ^^*
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입