안녕하세요. 혹시 조회할때 데이터가 2020~2023 년도 데이터를 무조건 뽑아 내야하는데
예로들어 pk값 1,2번에 2022년,2021년 데이터가 없지만무조건 2020~2023 데이터를 조회 될수 있게 하는 방법이 있을까요? with 가상테이블 만들어서 쓰면될거같은데 막상 짤려고하니 어렵네요 ㅠ
무조건 년도에 pk값에 따라 2020~2023 하나의 년도의 값만 있으면 나머지년도도 조회되면서 금액데이터는 0으로 처리하고싶습니다.
현재 데이터상태
년도 | pk값 | 금액 |
2020 | 1 | 1000 |
2021 | 1 | 2000 |
2023 | 1 | 4000 |
2020 | 2 | 2222 |
2022 | 2 | 3333 |
2023 | 2 | 4444 |
원하는값 조회
년도 | pk값 | 금액 |
2020 | 1 | 1000 |
2021 | 1 | 2000 |
2022 | 1 | 2222 |
2023 | 1 | 4000 |
2020 | 2 | 2222 |
2021 | 2 | 5555 |
2022 | 2 | 3333 |
2023 | 2 | 4444 |
WITH t AS ( SELECT '2020' yyyy, 1 pk, 1000 amt UNION ALL SELECT '2021', 1, 2000 UNION ALL SELECT '2023', 1, 4000 UNION ALL SELECT '2020', 2, 2222 UNION ALL SELECT '2022', 2, 3333 UNION ALL SELECT '2023', 2, 4444 ) SELECT a.yyyy , b.pk , IFNULL(c.amt, 0) amt FROM (WITH RECURSIVE y AS (SELECT '2020' yyyy UNION ALL SELECT yyyy + 1 FROM y WHERE yyyy < '2023' ) SELECT * FROM y ) a CROSS JOIN (SELECT DISTINCT pk FROM t) b LEFT OUTER JOIN t c ON a.yyyy = c.yyyy AND b.pk = c.pk ;