mysql 날짜데이터 없지만 조회 될수있게 하는방법 질문드립니다. 0 1 3,969

by 겸둥이k [SQL Query] mysql [2024.10.10 13:50:16]


안녕하세요.  혹시 조회할때 데이터가 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

 

by 마농 [2024.10.10 14:24:56]
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
;

 

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