[MYSQL] 데이터의 컬럼값 차이만큼 Row로 생성. 0 4 1,018

by kkang [MySQL] [2018.11.12 15:55:29]


안녕하세요. 테이블의 컬럼의 년도 차이만큼 data Row로 추출 하고 싶은데요.

예를 들면 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               
----------------------------------------------

이렇게 추출 하고 싶습니다.

by 마농 [2018.11.12 16:17:44]

MySQL 버전이 어찌 되나요?
최신버전 이라면? RECURSIVE WITH 를 이용해 자기 복제가 가능할 것으로 보입니다.
이전버전 이라면? copy_t 등을 이용해 복제하셔야 합니다.


by kkang [2018.11.12 16:22:16]

안녕하세요. 마농님. DB 버전은   10.3.10-MariaDB 입니다.


by 마농 [2018.11.12 16:26:48]
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
;

 


by kkang [2018.11.12 17:50:44]

마농님.. 감사 합니다. 꾸벅 ^^

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