안녕하세요!
MS-SQL (2016) 쿼리문 질문좀 드리겠습니다.
초보라 모르는게 많네요 ㅜㅜ
대여상품을 일자별로 통계를 내고 싶습니다.
대여상품 테이블
code | name |
0001 | A |
0002 | B |
0003 | C |
0004 | D |
0005 | E |
0006 | F |
0007 | G |
예약테이블 테이블
idx | g_code | start_date | end_date |
1 | 0001 | 2022-09-01 | 2022-09-05 |
2 | 0003 | 2022-09-25 | 2022-09-30 |
3 | 0006 | 2022-09-05 | 2022-09-08 |
4 | 0001 | 2022-09-10 | 2022-09-15 |
5 | 0002 | 2022-09-10 | 2022-09-14 |
6 | 0002 | 2022-09-22 | 2022-09-26 |
7 | 0004 | 2022-09-01 | 2022-09-05 |
8 | 0004 | 2022-09-06 | 2022-09-10 |
9 | 0004 | 2022-09-15 | 2022-09-20 |
10 | 0005 | 2022-09-16 | 2022-09-18 |
11 | 0005 | 2022-09-20 | 2022-09-25 |
쿼리 결과 (예 : 2022년 9월)
상품명 | 상품코드 | 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 |
A | 0001 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | |||||||||||||||||||
B | 0002 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | ||||||||||||||||||||
C | 0003 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | ||||||||||||||||||||||||
D | 0004 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | ||||||||||||||
E | 0005 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | 예약 | |||||||||||||||||||||
F | 0006 | 예약 | 예약 | 예약 | 예약 | ||||||||||||||||||||||||||
G | 0007 |
이렇게 결과를 가져오고 싶습니다.
어떻게 해야 할지 잘 모르겠네요..
고수님들 도와주세요.
with a as ( select '0001' code, 'A' name from dual union all select '0002' code, 'B' name from dual union all select '0003' code, 'C' name from dual union all select '0004' code, 'D' name from dual union all select '0005' code, 'E' name from dual union all select '0006' code, 'F' name from dual union all select '0007' code, 'G' name from dual), b as ( select 1 idx, '0001' g_code, '2022-09-01' start_date, '2022-09-05' end_date from dual union all select 2, '0003', '2022-09-25', '2022-09-30' from dual union all select 3, '0006', '2022-09-05', '2022-09-08' from dual union all select 4, '0001', '2022-09-10', '2022-09-15' from dual union all select 5, '0002', '2022-09-10', '2022-09-14' from dual union all select 6, '0002', '2022-09-22', '2022-09-26' from dual union all select 7, '0004', '2022-09-01', '2022-09-05' from dual union all select 8, '0004', '2022-09-06', '2022-09-10' from dual union all select 9, '0004', '2022-09-15', '2022-09-20' from dual union all select 10, '0005', '2022-09-16', '2022-09-18' from dual union all select 11, '0005', '2022-09-20', '2022-09-25' from dual ) select a.name , a.code , max(case when '01' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "1" , max(case when '02' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "2" , max(case when '03' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "3" , max(case when '04' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "4" , max(case when '05' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "5" , max(case when '06' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "6" , max(case when '07' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "7" , max(case when '08' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "8" , max(case when '09' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "9" , max(case when '10' BETWEEN substr(start_date, -2) AND substr(end_date, -2) then '예약' end) as "10" -- 나머지 생략 from a, b where a.code = b.g_code(+) group by a.name, a.code order by a.code asc ;
오라클로 만든거지만, sql server 에서 사용하는 함수로 약간만 변형하시면 될 것 같습니다.( substr -> right)