개발/DB

[DB / SQL / 다중 행 가로 출력]

터틀넥 2022. 12. 4. 23:00

✅ ISSUE

 

현재 보고서 관리 프로그램을 만들고 있는데, 한 건의 보고서에는 총 4명의 담당자가 등록되어야 한다.

 

보고서 구분은 'REPORTPK'라는 컬럼으로 한다. 이 컬럼은 담당자 테이블에 상속되어 1건의 보고서에 4명의 담당자가 등록될 수 있는 역할을 한다.

 

4명의 담당자를 등록하기 위해, 담당자 테이블(WORKER_TB)을 따로 만들고 'WORKERKIND'라는 컬럼을 두어, 해당 컬럼으로 하여금 어떤 담당자인지 구분할 수 있게 하였다.

 

'WORKERKIND'는 총 4개(수신자, 발신자, 담당관, 확인관)이고, 담당자 조회화면을 구현하기 위해 4개 행을 한 행으로 출력해야하는 Issue가 발생하였다.

 

 

 

 

 

✔ 일반 조회 시(여러 행)

 

SELECT * FROM WORKER_TB;

 

reportpk workerkind name empno
1 수신자 홍길동 2022_00
1 발신자 김민수 2022_01
1 등록관 이철수 2022_02
1 확인관 박민지 2022_03

 

 

 

 

✅ Solution

 

1. MAX 함수 활용(한 행으로 출력)

 

SELECT 

REPORTPK,

MAX(CASE WHEN WORKERKIND ='수신자' THEN NAME ELSE NULL END) AS RECEIVER,

MAX(CASE WHEN WORKERKIND ='발신자' THEN NAME ELSE NULL END) AS CALLER,

MAX(CASE WHEN WORKERKIND ='등록관' THEN NAME ELSE NULL END) AS REGISTRAR,

MAX(CASE WHEN WORKERKIND ='확인관' THEN NAME ELSE NULL END) AS CONFIRMER

FROM WORKER_TB

GROUP BY REPORTPK
HAVING REPORTPK = 1;

 

 

 

👀 RESULT

 

REPORTPK RECEIVER CALLER REGISTRAR CONFIRMER
1 홍길동 김민수 이철수 박민지

 

 

✅ 작업 후기

 

 

보고서 테이블 설계를 할 때, 사실 담당자 정보를 한 테이블에 다 때려넣으려고 했었다. 근데 개발을 요청한 클라이언트 조직 내 인원들이 부서 및 지사 이동이 잦은 조직이라, 보고서에 등록되는 담당자의 당시 소속에 대한 기록도 남겨야 했었어서 따로 테이블을 두어 이력을 관리하도록 하였다.

 

 

항상 습관처럼 만드는 이력관리 기능이지만, 항상 이 부분들은 어떻게 설계해야 할지 고민이 많이 된다. 아직 많이 부족하지만 이렇게 매일 기록하면서 어제보다 나은 설계를 할 수 있길 바래본다...⭐️