WITH A AS(
SELECT
    CAR_ID, 
    CASE 
        WHEN TO_DATE('2022-10-16', 'YYYY-MM-DD') BETWEEN START_DATE AND END_DATE THEN '1'
        WHEN TO_CHAR(END_DATE, 'YYYY-MM-DD') = '2022-10-16' THEN '1'
        ELSE '0'
    END AS AVAILABILITY,
    START_DATE,
    END_DATE
FROM 
    CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC
)

SELECT 
CAR_ID,
CASE
    WHEN SUM_AVA = '0' THEN '대여 가능'
    ELSE '대여중'
END AS AVAILABILITY

FROM(
SELECT CAR_ID, SUM(AVAILABILITY) AS SUM_AVA
FROM A
GROUP BY CAR_ID
ORDER BY CAR_ID DESC)
;

 


 

<포인트 정리>

 

1. 특정 숫자가 숫자 범위 안에 있는지

 

WHEN TO_DATE('2022-10-16', 'YYYY-MM-DD') BETWEEN START_DATE AND END_DATE THEN '1'

 

 

2. STR로 연산을 진행하기 뭔가 껄끄러울 때는 숫자로 돌려서 풀고 나중에 다시 mapping하는 방식을 생각해보자.

 

CASE 
        WHEN TO_DATE('2022-10-16', 'YYYY-MM-DD') BETWEEN START_DATE AND END_DATE THEN '1'
        WHEN TO_CHAR(END_DATE, 'YYYY-MM-DD') = '2022-10-16' THEN '1'
 ELSE '0'

 

 

3. 특정 group에 대해 case (조건문) 적용하기

 

SELECT 
CAR_ID,
CASE
    WHEN SUM_AVA = '0' THEN '대여 가능'
    ELSE '대여중'
END AS AVAILABILITY

FROM(
SELECT CAR_ID, SUM(AVAILABILITY) AS SUM_AVA
FROM A
GROUP BY CAR_ID
ORDER BY CAR_ID DESC)

+ Recent posts