문제

TROUBLE POINT

비교해야할 기록이 하나씩이라면 편하게 비교 할텐데.. 똑같은 차량임에도 '대여 가능' , '대여 중' 이 모두 표시하면 당연하게도 오류가 되겠다.
그렇다면 이것을 하나로 줄여낼 편한 방법은 없을지 고민을 하게 되었다.
해결 방안
서브쿼리를 이용하겠다.
모두에게 이름을 붙이는 방향보단, 오히려 해당이 있는것을 찾기 쉽기때문에 먼저 날짜에 해당이 있는 CAR_ID를 모두 다 가져온다.
SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '20221016' BETWEEN TO_CHAR(START_DATE,'YYYYMMDD') AND TO_CHAR(END_DATE, 'YYYYMMDD')
그리고 이 서브쿼리에 CAR_ID가 있다면 '대여중, 없다면 '대여 가능'으로 CASE문을 이용해 표시한다.
그리고 ID마다 한번씩만 비교하면 되기에 DISTINCT를 사용해준다.
해답
SELECT DISTINCT(A.CAR_ID), CASE
WHEN A.CAR_ID NOT IN (SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE '20221016' BETWEEN TO_CHAR(START_DATE,'YYYYMMDD') AND TO_CHAR(END_DATE, 'YYYYMMDD')) THEN '대여 가능'
ELSE '대여중' END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY A
ORDER BY A.CAR_ID DESC