"SQL문 코드로 두 테이블의 데이터를 계층으로 뽑아 출력하는 것에 어려움이 있었고, 생소했어서 정리하고자 한다."
문제
SQL문 코드
-- 전체 상위 클래스의 CD값은 000이므로 CASE WHEN 문으로 공백을 0으로 설정한다.
-- 또, LEVEL별로 공백을 주어 계층형 구조로 만든다.
SELECT CASE WHEN CD = '000' THEN LPAD (' ', 0*LEVEL) || TXT
ELSE LPAD(' ', 2*LEVEL) || TXT END AS 계층구조
FROM ( SELECT CLASS_CD AS CD -- 수업 코드
, CLASS_UP_CD AS UP_CD -- 상위 수업 코두
, CLASS_CD AS ORDERINGS -- 정렬 기준(수업 코드)
, CLASS_CD || '[' || CLASS_NM || ']' AS TXT -- 출력하고자하는 형식으로 맞춤
FROM CLASS
UNION ALL -- 행을 맞춰서 밑으로 합친다.(중복 허용)
SELECT STUDENT_ID AS CD -- 학생 아이디
, CLASS_CD AS UP_CD -- 수업 코드
, STUDENT_NM AS ORDERINGS -- 정렬 기준(학생 이름)
, STUDENT_ID || '[' || STUDENT_NM || ']' AS TXT -- 출력하고자하는 형식으로 맞춤
FROM STUDENT
)
START WITH CD = '000' -- 수업 코드가 00인 것을 시작으로 계층형을 만든다.
-- 부서 기준이 되는 코드 부서 코드(CLASS_CD) 상위 부서 코드(CLASS_UP_CD) 하위 코드(STUDENT_ID)
-- 사용자 기준이 되는 코드 학생아이디 코드(STUDENT_ID) 상위 부서 코드(CLASS_CD)
-- 기준을 잘 살펴보면 상위는 상위로 맞춰서 별칭(UP_CD)을 쓰고,
-- 기준이 되는 코드는 CD라는 코드로 맞춘 별칭을 쓴다.
CONNECT BY UP_CD = PRIOR CD
ORDER SIBLINGS BY ORDERINGS; -- 정렬이 되는 기준의 별칭으로 정렬한다.
-- ORDER SIBLINGS BY : 계층내에서 정렬 할 수 있다.
느낀 점