Tibero 연도별 count 를 구할수있나요? 부탁드려요.. 0 4 441

by 마이닝 tibero [2021.10.27 19:17:42]


어떤식으로 해야할지 도저히 모르겠어서 
여러 고수님들께 질문드립니다...


아래와 같은 년도값 데이터가 있다고할떄..
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

 

by pajama [2021.10.27 21:25:28]

좀 지저분 하지만..이것저것 참고해서 아래처럼 만들어봤습니다.

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
;

 


by 마이닝 [2021.10.28 18:51:06]

감사합니다!


by 마농 [2021.10.28 08:00:39]
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
;

 


by 마이닝 [2021.10.28 18:50:58]

감사합니다!

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