년도만 추출하기 질문입니다. 0 2 1,327

by 네로 [SQL Query] [2016.08.05 09:07:51]


아래 처럼 했더니 쿼리가 하염없이 돌아 갑니다.

 

SELECT  DISTINCT TO_CHAR(TO_DATE(O_SIHANG_DATE, 'yyyy') +LEVEL -1, 'yyyy') STD_YYYY, O_ORGAN_CODE
FROM
    (SELECT
         O_ORGAN_CODE,
         substr(O_SIHANG_DATE,1,4) O_SIHANG_DATE,
         substr(O_CLOSE_DATE,1,4) O_CLOSE_DATE
     FROM J_ORGAN
     START WITH
         O_ORGAN_CODE LIKE :P_ORGAN_CODE
     CONNECT BY NOCYCLE
         PRIOR O_ORGAN_CODE = O_BEFORE_ORGANCODE) A
     CONNECT BY TO_DATE(O_SIHANG_DATE,'yyyy') + LEVEL -1  <= TO_DATE(O_CLOSE_DATE, 'yyyy')

 

 A  19980202   20101201

 B   20101202  20130101

 C  20130102   20140506

이런 결과를 

A  1998

A  1999

A 2000

A 2001

....

A 2010

B 2010

B 2011

.....

C 2014

이렇게 구하고 싶은데 생각 처럼 잘 안됩니다.

답변 미리 감사 드립니다.

 

by 마농 [2016.08.05 09:19:48]

CONNECT BY LEVEL <= n 을 이용한 행복제 방법은 단건 데이터에서만 적용해야 합니다.
여러건의 집합에 적용하면 모래시계를 만나게 될 것입니다.
http://www.gurubee.net/article/55635
 

SELECT DISTINCT o_organ_code
     , TO_CHAR(o_sihang_date + lv - 1) std_yyyy
  FROM (SELECT o_organ_code
             , SUBSTR(o_sihang_date, 1, 4) o_sihang_date
             , SUBSTR(o_close_date , 1, 4) o_close_date
          FROM j_organ
         START WITH o_organ_code LIKE :p_organ_code
         CONNECT BY NOCYCLE PRIOR o_organ_code = o_before_organcode
        ) a
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99)
 WHERE lv <= o_close_date - o_sihang_date + 1
;

 


by 네로 [2016.08.05 12:32:32]

감사합니다. 해결 됐습니다.

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