이름 | 학교 | |
이순신 | 고등학교 | |
홍길동 | 고등학교 | 대학교 |
안녕하십니까..
학력을 관리하는 프로그램을 만들고 싶은데..
학력 테이블 : degree
칼럼 : name, school_flag
(school_flag =''M' 고등학교 / school_flag ='D' 대학교)
만약 고등학교만 있으면 고등학교만 출력되고 대학교만 있으면 대학교만 출력, 고등학교,대학교 모두 있으면 대학교만 출력 하려고 하는데 ㅠㅠcase문 써도 잘 안되네요 ㅠㅠ
(예를들어 홍길동이 고등학교,대학교이지만 select되는거는 대학교만 출력되게끔 )
select name, case when school_flag='D' then '박사논문'
when school_flag='M' then '석사논문' end AS school_flag
from(
select A.name, B.school_flag AS school_flag, C.school_flag AS school_flag from degree A
left join (select name, school_flag from degree where school_flag='M') AS B ON B.name =A.name
left join (select name, school_flag from degree where school_flag='D') AS C ON C.name =A.name
group by A.name, B.school_flag, C.school_flag
)
WITH DEGREE AS (SELECT 'name1' NAME, 'M' SCHOOL_FLAG FROM DUAL UNION ALL SELECT 'name1' NAME, 'D' SCHOOL_FLAG FROM DUAL UNION ALL SELECT 'name2' NAME, 'D' SCHOOL_FLAG FROM DUAL UNION ALL SELECT 'name3' NAME, 'M' SCHOOL_FLAG FROM DUAL) SELECT * FROM (SELECT NAME , CASE WHEN SCHOOL_FLAG = 'D' THEN '대학교' WHEN SCHOOL_FLAG = 'M' THEN '고등학교' ELSE '기타' END DEGREE_NAME , ROW_NUMBER() OVER( PARTITION BY NAME ORDER BY (CASE WHEN SCHOOL_FLAG = 'D' THEN 1 WHEN SCHOOL_FLAG = 'M' THEN 2 ELSE 3 END) ASC ) DEGREE_PRIORITY FROM DEGREE) WHERE DEGREE_PRIORITY = 1;