SELECT (SELECT CD_NM FROM SY5020 WHERE C_CD = :C_CD AND IDX_CD = 'OM100' AND CD = '01') CD_NM , T.STA_YMD , LEAST(T.END_YMD, LEAST(NVL(:RETIRE_YMD, '99991231'), TO_CHAR(SYSDATE,'YYYYMMDD'))) END_YMD FROM PA1020 T, OM0010 A WHERE T.C_CD = :C_CD AND T.EMP_ID = :EMP_ID AND T.C_CD = A.C_CD AND T.ORG_ID = A.ORG_ID AND T.LAST_YN = 'Y' AND T.END_YMD BETWEEN A.STA_YMD AND A.END_YMD
해당 쿼리의 결과값은
CD_NM | STA_YMD | END_YMD |
상품 | 20110201 | 20110430 |
상품 | 20110501 | 20111231 |
상품 | 20120101 | 20121231 |
상품 | 20130101 | 20130331 |
상품 | 20130401 | 20140506 |
상품 | 20140507 | 20141015 |
상품 | 20141016 | 20161202 |
이렇게 나옵니다.
이 결과값을
CD_NM | STA_YMD | END_YMD |
상품 | 20110201 | 20161202 |
이런식으로 처리가 가능 할까요?
아래행의 컬럼값(CD_NM) 을 비교하여 같은 이름일 경우 합치는건데
같은 이름일 경우 STA_YMD 일자는 시작일자로, END_YMD는 마지막 최근 종료일자가 되야 합니다.
어떻게 풀어 나가야 할지 방법이 떠오르지 않아서...
혹시나 가능 할지 궁금 합니다.
오!~ 감사합니다
SELECT CD_NM, MIN(STA_YMD) STA_YMD, MAX(END_YMD) END_YMD FROM (SELECT C.CD_NM, T.STA_YMD, LEAST(T.END_YMD, LEAST(NVL(:RETIRE_YMD, '99991231'), TO_CHAR(SYSDATE,'YYYYMMDD'))) END_YMD FROM PA1020 T, OM0010 A, SY5020 C WHERE T.C_CD = :C_CD AND T.EMP_ID = :EMP_ID AND T.C_CD = A.C_CD AND T.ORG_ID = A.ORG_ID AND T.C_CD = C.C_CD AND A.ORG_GRP_CD = C.CD AND C.IDX_CD = 'OM100' AND C.CD = '03' AND T.LAST_YN = 'Y' AND T.END_YMD BETWEEN A.STA_YMD AND A.END_YMD) GROUP BY CD_NM
공통코드 쪽에서 코드 값을 대입해보니 조금 문제가 있는거 같아 조금 변형하니 잘 나옵니다.
감사합니다!!~