쿼리문 질문 드리겠습니다. ㅜㅜ 2

by 블루카이 [SQL Query] [2022.10.26 15:29:00]


MS-SQL 2016을 사용하고 있습니다.
계속 쿼리문을 만들어 보고 있는데 정말 어렵네요.
월별 차량 예약정보를 확인후 예약이 가능하도록 하는 쿼리를 만들어 보고 싶은데 잘 안되네요.
고수님들 좀 도와 주시거나, 힌트 같은게 있으면 부탁드리겠습니다.

 

차량 테이블

code name
0001 차량1
0002 차량1
0003 차량3
0004 차량4

예약 테이블

order_code car_code start_date end_date
ord0001 0001 2022-10-01 2022-10-03
ord0002 0001 2022-10-15 2022-10-18
ord0003 0001 2022-11-05 2022-11-07
ord0004 0002 2022-10-16 2022-10-17
ord0005 0002 2022-10-03 2022-10-03

10월 예약현황

차량코드 차량명 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0001 차량1 완료 완료 완료                       완료 완료 완료 완료                          
0002 차량2     완료                         완료 완료                            
0003 차량3                                                              
0004 차량4                                                              

11월 예약현황

차량코드 차량명 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0001 차량1         완료 완료 완료                                                
0002 차량2                                                              
0003 차량3                                                              
0004 차량4                                                              

12월 예약현황

차량코드 차량명 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0001 차량1                                                              
0002 차량2                                                              
0003 차량3                                                              
0004 차량4                                                              

이렇게 월별로 현황판을 구현해 보고 싶습니다.
MS-SQL 사용하고 있습니다. 초보에요;
감사합니다.

by 마농 [2022.10.26 16:49:23]
WITH car_code AS
(
SELECT '0001' code, '차량1' name
UNION ALL SELECT '0002', '차량2'
UNION ALL SELECT '0003', '차량3'
UNION ALL SELECT '0004', '차량4'
)
, car_order AS
(
SELECT 'ord0001' order_code, '0001' car_code, '2022-10-01' start_date, '2022-10-03' end_date
UNION ALL SELECT 'ord0002', '0001', '2022-10-15', '2022-10-18'
UNION ALL SELECT 'ord0003', '0001', '2022-11-05', '2022-11-07'
UNION ALL SELECT 'ord0004', '0002', '2022-10-16', '2022-10-17'
UNION ALL SELECT 'ord0005', '0002', '2022-10-03', '2022-10-03'
)
, calendar AS
(
SELECT DATEADD(day, 0, '2022-11-01') dt
 UNION ALL
SELECT DATEADD(day, 1, dt) dt
  FROM calendar
 WHERE dt < DATEADD(day, -1, DATEADD(month, 1, '2022-11-01'))
)
SELECT *
  FROM (SELECT a.code
             , a.name
             , d.d
             , d.v
          FROM car_code a
          LEFT OUTER JOIN
               (SELECT c.car_code
                     , DAY(b.dt) d
                     , '완료' v
                  FROM calendar b
                 INNER JOIN car_order c
                    ON b.dt BETWEEN c.start_date AND c.end_date
                ) d
            ON a.code = d.car_code
        ) e
 PIVOT (MIN(v) FOR d
    IN (  [1],  [2],  [3],  [4],  [5],  [6],  [7],  [8],  [9], [10]
       , [11], [12], [13], [14], [15], [16], [17], [18], [19], [20]
       , [21], [22], [23], [24], [25], [26], [27], [28], [29], [30]
       , [31] )) f
;

 


by 블루카이 [2022.10.26 17:41:21]

정말 진심으로 감사드립니다. 많은 것을 배우고 갑니다...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입