조건 쿼리문 질문드립니다.. 0 2 645

by 성공한다 [Oracle 기초] [2018.10.29 08:27:22]


이름 학교
이순신 고등학교  
홍길동 고등학교 대학교

 

 

안녕하십니까..

학력을 관리하는 프로그램을 만들고 싶은데..

학력 테이블 : 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
)

by 신이만든지기 [2018.10.29 12:06:00]
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;

 


by 마농 [2018.10.29 17:58:51]
SELECT name
     , CASE MIN(school_flag)
       WHEN 'D' THEN '대학교'
       WHEN 'M' THEN '고등학교'
        END school_flag
  FROM degree
 GROUP BY name
;

 

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