이름 | 학교 | 과목 | 기간 | 수료여부 | 신분 |
박나래 | 무궁화초등 | 수학 | 1년 | 수료 | 학생 |
박나래 | 무궁화초등 | 과학 | 8월 | 수료 | 학생 |
박나래 | 무궁화초등 | 영어 | 10월 | 수료 | 학생 |
홍길동 | 무궁화고등 | 영어 | 1년 | 수료 | 선생 |
홍길동 | 무궁화고등 | 영어 | 6월 | 수료 | 선생 |
이 같은 데이터를
이름 | 학교 | 과목 | 수료여부 | 신분 |
박나래 | 무궁화초등 | 수학,과학,영어 | 수료 2년 6월 | 학생 |
홍길동 | 무궁화고등 | 영어 | 수료 1년 6월 | 선생 |
이런식으로 데이터를 뽑고 싶습니다 기준은 이름이 되고 과목의 데이터가 다른 열을 하나의 열로 바꿔주고
수료여부와 기간을 합쳐서 수료 합산년수 로 하고 싶은데 어떤식으로 쿼리를 짜야 할가요?
항상 나래비를 세워서 여러 열을 하나의 열로 바꿔 주는 것이 어렵네요 ;; 도움 부탁 드립니다
with t (이름, 학교, 과목, 기간, 수료여부, 신분) as ( select '박나래','무궁화초등','수학','1년','수료','학생' from dual union all select '박나래','무궁화초등','과학','8월','수료','학생' from dual union all select '박나래','무궁화초등','영어','10월','수료','학생' from dual union all select '홍길동','무궁화고등','영어','1월','수료','선생' from dual union all select '홍길동','무궁화고등','영어','6월','수료','선생' from dual) select 이름, 학교, 과목, '수료 '||case when 수료 < 12 then mod(수료,12)||'개월' when mod(수료,12) = 0 then trunc(수료/12)||'년' else trunc(수료/12)||'년'||mod(수료,12)||'개월' end 수 , 신분 from ( select 이름,학교 , Listagg(과목, ',') Within Group (Order By rownum) 과목 , sum(decode(substr(기간,-1,1),'년',to_number(replace(기간,'년','')) * 12,'월',to_number(replace(기간,'월','')))) 수료 , min(신분) 신분 from t group by 이름,학교);