안녕하세요. 지난번에 질문했던 했던 내용인데요.
DB가 10.3.10-MariaDB 에서 mysql 8.0.13 로 변경이 되었습니다. 그래서 다시 질문을 드리게 되었습니다.
지난번에 마농님이 가이드 해주신 seq_1_to_9 b -- MariaDB 전용 seq -- 이걸로 작성을 하였는데
-----------------마농님 가이드------------------------
WITH t AS
(
SELECT 1 order_id, '201102' start_yyyymm, '201301' end_yyyymm, 100 order_rate
UNION ALL SELECT 2, '201801', '201812', 80
UNION ALL SELECT 3, '201802', '202301', 70
)
SELECT a.order_id
, b.seq AS order_row
, SUBSTR(a.start_yyyymm, 1, 4) + b.seq - 1 order_yyyy
, a.order_rate
FROM t a
INNER JOIN seq_1_to_9 b -- MariaDB 전용 seq 생성 --
ON b.seq <= SUBSTR(a.end_yyyymm, 1, 4) - SUBSTR(a.start_yyyymm, 1, 4) + 1
WHERE a.order_id = 3
--------------------------------------------
질문을 다시 드리겠습니다.
예를 들면 order 라는 테이블의 데이터에
order_id start_yyyymm end_yyyymm order_rate
1 201102 201301 100
2 201801 201812 80
3 201802 202301 70
이렇게 있다고 한다면
-------------------------------------------
order_id 가 3인 데이터를 추출 한다면 Row가
order_row year order_rate
1 2018 70
2 2019 70
3 2020 70
4 2021 70
5 2022 70
6 2023 70
----------------------------------------------
-------------------------------------------
order_id 가 1인 데이터를 추출 한다면 Row가
order_row year order_rate
1 2011 100
2 2012 100
3 2013 100
----------------------------------------------
이렇게 추출 하고 싶습니다.
WITH t AS ( SELECT 1 order_id, '201102' start_yyyymm, '201301' end_yyyymm, 100 order_rate UNION ALL SELECT 2, '201801', '201812', 80 UNION ALL SELECT 3, '201802', '202301', 70 ) SELECT a.order_id , b.seq AS order_row , SUBSTR(a.start_yyyymm, 1, 4) + b.seq - 1 order_yyyy , a.order_rate FROM t a INNER JOIN (select @num := @num + 1 as seq from t s1 , t s2 , (select @num := 0) n limit 9 ) b ON b.seq <= SUBSTR(a.end_yyyymm, 1, 4) - SUBSTR(a.start_yyyymm, 1, 4) + 1 WHERE a.order_id = 1 ;