어떤식으로 해야할지 도저히 모르겠어서 여러 고수님들께 질문드립니다... 아래와 같은 년도값 데이터가 있다고할떄.. 1번째 ROW 2018~2021 은 4년 치이기에 YCNT 값이 4가나오고... 2번쨰 ROW 2020~2021 2년치 이기에 YCNT 값이 2 3번쨰 ROW 2021~2021 1년치 이기에 YCNT 값이 1이 나왔으면좋겠습니다. --가상 테이블 (CNT : Min 1, Max 10) WITH TEST_TABLE AS ( SELECT '2018' SDT, '2021' EDT FROM DUAL UNION ALL SELECT '2020' SDT, '2021' EDT FROM DUAL UNION ALL SELECT '2021' SDT, '2021' EDT FROM DUAL ) SELECT SDT,EDT, 0 YCOUNT FROM TEST_TABLE
즉 결과값이
SDT EDT YCNT
2018 2021 4
2020 2021 2
2021 2021 1
처럼 나왔으면 좋겠는데 어떻게해야할까요...?
두번째 질문으로는 위 카운트를 내는게 카운트별로 로우수를 늘리고 각각의 연도(Y_VAL)를 구하기 위함입니다.
최종적으로는 아래와같은 데이터를 뽑고싶은데.. 이게 쿼리로 가능한걸까요...?
로우수 늘리는건 http://www.joshi.co.kr/index.php?mid=board_MfJr34&document_srl=292680 이사이트에서 보았습니다.
SDT EDT YCNT Y_VAL
2018 2021 4 2018
2018 2021 4 2019
2018 2021 4 2020
2018 2021 4 2021
2020 2021 2 2020
2020 2021 2 2021
2021 2021 1 2021
좀 지저분 하지만..이것저것 참고해서 아래처럼 만들어봤습니다.
WITH TEST_TABLE (SDT, EDT) AS ( SELECT 2018, 2021 FROM DUAL UNION ALL SELECT 2020, 2021 FROM DUAL UNION ALL SELECT 2021, 2021 FROM DUAL ), T2 (S, YCNT, Y_VAL, EDT) AS ( SELECT SDT, EDT-SDT + 1, SDT , EDT FROM TEST_TABLE UNION ALL SELECT S , YCNT , Y_VAL + 1, EDT FROM T2 WHERE Y_VAL < EDT ) SELECT S, EDT, YCNT, Y_VAL FROM T2 ORDER BY S, Y_VAL ;
WITH test_table AS ( SELECT 1 pk, '2018' sdt, '2021' edt FROM dual UNION ALL SELECT 2, '2020', '2021' FROM dual UNION ALL SELECT 3, '2021', '2021' FROM dual ) SELECT pk , sdt , edt , edt - sdt + 1 ycnt , sdt + lv - 1 y_val FROM test_table , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) WHERE lv <= edt - sdt + 1 ORDER BY pk, lv ;