[SQL] 취소되지 않은 진료 예약 조회하기(DATE) ✅

Jaewon Lim·2025년 1월 18일

📝 문제 설명

다음은 환자 정보를 담은 PATIENT 테이블과 의사 정보를 담은 DOCTOR 테이블, 그리고 진료 예약목록을 담은 APPOINTMENT에 대한 테이블입니다. PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다.

Column NameTypeNullable
PT_NOVARCHAR(N)FALSE
PT_NAMEVARCHAR(N)FALSE
GEND_CDVARCHAR(N)FALSE
AGEINTEGERFALSE
TLNOVARCHAR(N)TRUE

DOCTOR 테이블은 다음과 같으며 DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.

Column NameTypeNullable
DR_NAMEVARCHAR(N)FALSE
DR_IDVARCHAR(N)FALSE
LCNS_NOVARCHAR(N)FALSE
HIRE_YMDDATEFALSE
MCDP_CDVARCHAR(N)TRUE
TLNOVARCHAR(N)TRUE

APPOINTMENT 테이블은 다음과 같으며 APNT_YMD, APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_CNCL_YN, APNT_CNCL_YMD는 각각 진료 예약일시, 진료예약번호, 환자번호, 진료과코드, 의사ID, 예약취소여부, 예약취소날짜를 나타냅니다.

❓ 문제

PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

📖 예시

PATIENT 테이블이 다음과 같고,

PT_NOPT_NAMEGEND_CDAGETLNO
PT22000019바라W1001079068799
PT22000043오스왈드M6801031294124
PT22000052제니W60NULL
PT22000071몬몬M3101076489209
PT22000097슈가M19NULL

DOCTOR 테이블이 다음과 같고,

DR_NAMEDR_IDLCNS_NOHIRE_YMDMCDP_CDTLNO
루피DR20090029LC000100012009-03-01CS01085482011
니모DR20200012LC009111622020-03-01CS01089483921
핑크퐁DR20140011LC000822012014-03-01NP01098428957
젤라비DR20160031LC003403272016-11-01OB01023981922
토리DR20190129LC000999112019-03-01NS01058390758

APPOINTMENT 테이블이 다음과 같을 때,

Column NameTypeNullable
APNT_YMDTIMESTAMPFALSE
APNT_NOINTEGERFALSE
PT_NOVARCHAR(N)FALSE
MCDP_CDVARCHAR(N)FALSE
MDDR_IDVARCHAR(N)FALSE
APNT_CNCL_YNVARCHAR(N)TRUE
APNT_CNCL_YMDDATETRUE

SQL을 실행하면 다음과 같이 출력되어야 합니다.

APNTNOPTNAMEPTNOMCDPCDDRNAMEAPNTYMD
46오스왈드PT22000043CS루피2022-04-13 09:00:00.000000
42몬몬PT22000071CS루피2022-04-13 12:30:00.000000
43바라PT22000019CS니모2022-04-13 15:30:00.000000

💻 코드

내코드

WITH T AS(
    SELECT D.DR_NAME, D.MCDP_CD, A.APNT_YMD, A.APNT_NO, A.PT_NO, D.TLNO
    FROM DOCTOR D INNER JOIN APPOINTMENT A
    ON D.DR_ID = A.MDDR_ID 
    WHERE D.MCDP_CD = 'CS' AND A.APNT_YMD LIKE '2022-04-13%' AND APNT_CNCL_YN = 'N'
)
SELECT T.APNT_NO 
      ,P.PT_NAME
      ,P.PT_NO
      ,T.MCDP_CD
      ,T.DR_NAME
      ,T.APNT_YMD
FROM T INNER JOIN PATIENT P
ON T.PT_NO = P.PT_NO
ORDER BY APNT_YMD ASC

🔍 분석

  1. D.DR_ID = A.MDDR_ID
    둘 다 같은 의사 ID를 나타내지만 테이블에선 다른 이름의 컬럼으로 사용되기 때문에 주의해야 함

0개의 댓글