문제 링크 : https://velog.io/@yooha9621/SQLP실기문제-날짜55번
SELECT 작업일련번호 , 작업자ID ,
DECODE(작업구분코드,'A','개통','B','장애') 작업구분 ,
DECODE(작업구분코드,'A',B.고객번호,'B',C.고객번호) 고객번호 ,
DECODE(작업구분코드,'A',B.주소,'B',C.주소) 주소
FROM 작업지시 A , 개통접수 B , 장애접수 C
WHERE A.방문예정일자 = TO_CHAR(SYSDATE, 'YYYYMMDD')
AND B.개통접수번호(+) = DECODE(작업구분코드,'A',A.접수번호)
AND C.장애접수번호(+) = DECODE(작업구분코드,'B',A.접수번호);
🍎 정리
- 방문 예정일자가 '오늘' 인 작업지시 데이터를 드라이빙 테이블로 놓고 작업구분코드에 따라 개통접수 테이블과 장애접수 테이블 각각 NL 아우터 조인하여 UNION ALL 처리한다.
- 날짜 비교는 방문예정일자 = TO_CHAR(sysdate , 'YYYYMMDD') 로 했다.
😥 헷갈렸던 부분
- 방문예정일자 는 말그대로 연-월-일 까지만 나와있는 걸 나타낸다.
- 조인조건을 A.접수번호 = DECODE(작업구분코드,'A',B.개통접수번호,'B','C.장애접수번호') 이렇게 A의 작업구분코드에 따라 B의 개통접수번호 또는 C의 장애접수번호로 조인되도록 썼는데 답안엔 이렇게 나와있지 않다.이렇게 쓰면 안되는건가..?
- 우선 각 테이블 마다 각각 조인 조건을 나누고 아우터 조인으로 시도했다.
- DECODE 문을 작업구분 코드가 'A'가 아니면 NULL로 표기하는 법
- DECODE(작업구분코드,'A',A.접수번호)