Documentation

EMP, DEPT 클립리포트 실습 문제 해설본

[!CAUTION] 이 문서는 강사용 해설본입니다. 학습자에게 배포하지 말고, 채점 기준과 풀이 방향을 확인할 때만 사용하세요.

테이블건수컬럼설명
DEPT6DEPTNO부서번호
DEPT6DNAME부서명
DEPT6LOC지역
EMP10EMPNO사원번호
EMP10ENAME사원명
EMP10JOB직무
EMP10MGR관리자 사원번호
EMP10HIREDATE입사일
EMP10SAL급여
EMP10COMM수당
EMP10DEPTNO부서번호

특이 데이터:

  • COMMNULL인 행이 많고, TURNER0입니다.
  • ENAME131BLAKE처럼 숫자가 포함된 값이 있습니다.
  • DEPT에는 사원이 없는 부서가 있습니다. 예: 40, 50, 60

모든 문제는 Prepared Statement 방식으로 조회조건을 전달하게 유도합니다. 문제지에는 기능명을 직접 노출하지 않고, “화면에서 입력받은 조회조건을 데이터셋 조건으로 전달”한다고만 표현했습니다.

날짜는 쿼리에서 YYYYMMDD 문자로 만들고, 디자이너 출력양식에서 문제별 요구 결과와 같은 항목을 선택하게 합니다.

TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD

문제별 예상 출력:

문제 1, 2: 20260308 -> 2026-03-08 목
문제 3:    20260308 -> 2026.03.08 목요일

하단 페이지 번호는 학습자에게 PageNofM이라는 이름을 직접 주지 않고, 1/2, 2/2처럼 보이게 하라고 출제했습니다. 해설에서는 시스템 필드 PageNofM을 사용하면 됩니다.


기본 목록 출력, 매 페이지 반복 제목, 페이지 하단, 시스템 번호, 날짜 출력양식, 조회조건 전달을 확인하는 문제입니다.

조건데이터셋 파라미터교체 형식
JOBPS_JOB'{value}'

SELECT A.EMPNO AS EMPNO
     , A.ENAME AS ENAME
     , A.JOB AS JOB
     , A.MGR AS MGR
     , TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
     , A.SAL AS SAL
     , A.COMM AS COMM
     , A.DEPTNO AS DEPTNO
  FROM EMP A
 WHERE 1 = 1
   AND (A.JOB = {dataset.PS_JOB} OR {dataset.PS_JOB} IS NULL)
 ORDER BY A.EMPNO

[!NOTE] 디자이너에서 빈 문자열 처리가 어렵다면 파라미터 기본값을 NULL로 넘기거나, 조건 없이 전체 조회되는 별도 처리 방식을 사용해도 됩니다. 핵심은 JOB 값이 있을 때 여러 건이 나올 수 있는 조건이어야 한다는 점입니다.

요구사항 표현해설
제목이 매 페이지마다 보임페이지 머리글 사용
하단이 매 페이지마다 보임페이지 바닥글 사용
1/2, 2/2 형식시스템 필드 PageNofM 사용
순번 기본 번호 필드시스템 필드 또는 디자이너 제공 행 번호 필드 사용
2026-03-08 목출력양식 yyyy-mm-dd aaa 선택

  • 문제지에 기능명이 없어도 페이지 머리글/바닥글을 찾아 썼는가
  • JOB 조건이 데이터셋 파라미터로 전달되는가
  • 조건을 비웠을 때 전체 사원이 출력되는가
  • 입사일이 YYYYMMDD 원본이 아니라 yyyy-mm-dd aaa 형태로 보이는가
  • 하단 페이지 번호가 PageNofM 글자가 아니라 1/2처럼 렌더링되는가

서브리포트를 부서 행의 일부 칸에 넣는 것이 아니라, 부서 정보 아래의 가로 전체 영역으로 배치하도록 유도합니다. 메인 DEPT, 서브 EMP 구조가 가장 자연스럽습니다.

조건데이터셋 파라미터교체 형식
LOCPS_LOC'{value}'

SELECT A.DEPTNO AS DEPTNO
     , A.DNAME AS DNAME
     , A.LOC AS LOC
  FROM DEPT A
 WHERE 1 = 1
   AND (A.LOC = {dataset.PS_LOC} OR {dataset.PS_LOC} IS NULL)
 ORDER BY A.DEPTNO

SELECT A.EMPNO AS EMPNO
     , A.ENAME AS ENAME
     , A.JOB AS JOB
     , TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
     , A.SAL AS SAL
     , NVL(TO_CHAR(A.COMM), '-') AS COMM_TEXT
     , A.DEPTNO AS DEPTNO
  FROM EMP A
 WHERE A.DEPTNO = {dataset.PS_DEPTNO}
 ORDER BY A.EMPNO

구분
서브 데이터셋 파라미터PS_DEPTNO
교체 형식{value}
연결 값메인 데이터셋의 DEPTNO

영역구성
메인 본문부서번호, 부서명, 지역
서브리포트부서 아래 가로 전체 영역에 사원 목록 출력
서브리포트 하단부서별 급여 합계

공식 필드용도
DEPT_SUM_SAL현재 부서의 급여 합계
var result = rexpert.sum("본문", "SAL", false, "", "");
return result;

[!IMPORTANT] 실제 요약 범위명은 디자이너에서 생성된 섹션/그룹 이름에 맞춰 조정해야 합니다. 해설의 핵심은 서브리포트 내부에서 부서별 합계를 계산한다는 점입니다.

  • DEPTEMP를 각각 별도 데이터셋으로 만들었는가
  • LOC 조건이 메인 데이터셋에 전달되는가
  • 서브리포트가 한 줄 전체 폭을 사용하는 형태인가
  • 서브리포트가 메인 부서의 DEPTNO를 받아 해당 부서 사원만 출력하는가
  • COMMNULL-로 표시되는가
  • 부서별 급여 합계가 표시되는가

조인된 평면 데이터를 출력물에서 부서/직무 계층으로 다시 나누는 문제입니다. 그룹 섹션, 그룹 바닥글, 공식 필드, 조건스타일, 조회조건 전달을 함께 확인합니다.

조건데이터셋 파라미터교체 형식
최소 급여PS_MIN_SAL{value}

SELECT B.DEPTNO AS DEPTNO
     , B.DNAME AS DNAME
     , B.LOC AS LOC
     , A.JOB AS JOB
     , A.EMPNO AS EMPNO
     , A.ENAME AS ENAME
     , A.MGR AS MGR
     , TO_CHAR(A.HIREDATE, 'YYYYMMDD') AS HIREDATE_YMD
     , A.SAL AS SAL
     , A.COMM AS COMM
     , NVL(TO_CHAR(A.COMM), '-') AS COMM_TEXT
  FROM DEPT B
 INNER JOIN EMP A
    ON A.DEPTNO = B.DEPTNO
 WHERE 1 = 1
   AND (A.SAL >= {dataset.PS_MIN_SAL} OR {dataset.PS_MIN_SAL} IS NULL)
 ORDER BY B.DEPTNO
        , A.JOB
        , A.ENAME

그룹 단계기준 필드배치 위치
1단계DEPTNO부서 머리/바닥 영역
2단계JOB직무 머리/바닥 영역

그룹은 바깥쪽부터 안쪽으로 추가합니다.

  1. 부서 기준 그룹 생성
  2. 직무 기준 그룹 생성
  3. 본문에 사원 행 배치
  4. 직무 바닥 영역에 직무별 급여 합계 배치
  5. 부서 바닥 영역에 부서별 급여 합계 배치
  6. 보고서 마지막 영역에 전체 급여 합계와 전체 평균 급여 배치

공식 필드요약 범위요약 필드출력 위치
JOB_SUM_SAL직무 그룹SAL직무 바닥 영역
DEPT_SUM_SAL부서 그룹SAL부서 바닥 영역
TOTAL_SUM_SAL전체SAL보고서 마지막 영역
TOTAL_AVG_SAL전체SAL보고서 마지막 영역

조건적용 대상스타일
SAL >= 3000본문 행 또는 급여 칸배경색 강조, 굵게
COMM_TEXT != '-'수당 칸글자색 강조
ENAME == 'KING'사원명 칸 또는 행테두리/배경 강조

[!WARNING] 행 전체 강조가 어려우면 급여 칸, 수당 칸, 사원명 칸처럼 칸 단위로 적용해도 됩니다.

  • PS_MIN_SAL 조건이 Prepared Statement 방식으로 전달되는가
  • 조건을 비워 두었을 때 여러 부서와 여러 직무가 출력되는가
  • 입사일이 YYYYMMDD 원본이 아니라 yyyy.mm.dd aaaa 형태로 보이는가
  • 부서/직무 그룹 순서가 자연스러운가
  • 직무별 소계와 부서별 소계가 각각 다른 위치에 표시되는가
  • 전체 합계/평균이 마지막에 표시되는가
  • 조건스타일이 2개 이상 실제 출력 결과에 보이는가
  • 하단 페이지 번호가 1/2처럼 표시되는가

항목배점 예시확인 내용
조회조건 전달15각 문제의 조건이 데이터셋 조건으로 전달됨
데이터셋 구성15문제별 데이터셋 수와 SQL 의도 일치
섹션 활용20반복 제목, 하단, 그룹, 본문, 소계 영역 사용
필드 및 출력양식15날짜, 숫자, 정렬, 여백
서브리포트15전체 폭 배치와 파라미터 연결
공식 필드10소계/합계/평균 계산
조건스타일5조건과 스타일 적용
결과 이미지 제출5각 문제별 결과 이미지 첨부

학습자에게는 다음 기준으로 피드백하면 좋습니다.

1번은 기본 목록 출력, 반복 제목/하단, 날짜 출력양식을 보는 문제입니다.
2번은 데이터셋 분리와 하위 출력 영역 연결을 보는 문제입니다.
3번은 조인 결과를 부서/직무 단위로 다시 구조화하는 능력을 보는 문제입니다.