쿼리작성에 도움을 청합니다. 0 2 178

by 거제도원주민 [SQL Query] SQL [2018.07.04 12:48:01]


안녕하세요. 이곳에서 많은 도움을 받고 있습니다.
쿼리 작성에 도움을 청합니다.

아래 SAMPLE데이타

SUB_SYS_CODE  PGM_ID  PGM_NAME_DESC
--------------------------------------------
GASAA	GASAA0010A	도서목록및대여관리
	    GASAA0020A	사내문서및증빙자료관리
    	GASAA0030A	차량운행정보관리
    	GASAA0040A	지게차량운행정보관리
    	GASAA0050A	식수인원정보예량관리
    	GASAA0060A	주말 근무자현황관리
GWAPA	GWAPA0010A	결재 작성함
MMGLA	GWAPA0010A	결재대기함
    	GWAPA0020A	결재 대기함
    	GWAPA0030A	결재 진행함
    	GWAPA0040A	결재 반려함
    	GWAPA0050A	결재 완료함
GWAPB	GWAPB0010A	지출결의서
    	GWAPB0020A	업무협조전
    	GWAPB0030A	품의서
    	GWAPB0040A	발주서
    	GWAPB0050A	근태계작성
GWAPC	GWAPC0010A	문서표준양식목록
HRBAE	HRBAE0010A	사원인사정보 등록
    	HRBAE0011I	사원인사정보 조회
    	HRBAE0020A	인사조직정보 등록
    	HRBAE0020I	인사조직정보 조회
HRBAF	HRBAE0100A	직원 근무근태관리
    	HRBAE0200I	직원일일출근현황
HRBAZ	HRBAZ0010A	표준정보관리
    	MMGLA0030A	POR등록및확정
MMGLB	MMGLB0010A	발주등록
    	MMGLB0020A	발주수정및확정
    	MMGLB0060I	발주현황조회
    	MMGLB0080A	업체별구매단가정보관리
MMGLC	MMGLC0010A	입고등록
    	MMGLC0020A	입고수정
    	MMGLC0030I	입고내역 조회
    	MMGLC0040A	입고차수마감
MMPEC	MMGLC0060I	세금계산서 수수현황 조회
    	MMGLC0120I	미입고현황
    	MMGLC0200A	사급자재입고관리
    	MMGLC0300A	소요자재공급구분현황
    	MMGLC0500A	묶음단위자재리스트(DSME)
MMGLD	MMGLD0020A	사급자재불출등록및불출현황

---------------------

위의 데이타 샘플은 PGM_ID가 앞에서 5자리까지 유일하게 구분이 됩니다.

위의 샘플내용은 아래 쿼리에 의한 결과 입니다. ROW_NUMBER() 순위함수를 잘못 적용했는지

MMGLA GWAPA0010A 결재대기함 --- 이 잘못 표기 됩니다. ㅡ>

MMGLA MMGLA0030A POR등록및확정 -->이렇게 되어야 되는데..

제가 어떤 부분이 잘못 적용했을까요?

쿼리 조언 부탁 드립니다.

SELECT *
FROM   (SELECT DECODE(RN1, 1, SUB_SYS_CODE) SUB_SYS_CODE,
               DECODE(RN2, 1, PGM_ID)       PGM_ID,
               PGM_NAME_DESC                PGM_NAME_DESC
        FROM   (SELECT SUB_SYS_CODE,
                       PGM_ID,
                       PGM_NAME_DESC,
                       ROW_NUMBER()  OVER(  PARTITION BY SUB_SYS_CODE         ORDER BY PGM_ID, PGM_NAME_DESC) RN1,
                       ROW_NUMBER()  OVER(  PARTITION BY SUB_SYS_CODE, PGM_ID ORDER BY PGM_NAME_DESC        )   RN2
                FROM   (SELECT DISTINCT SM004M.SUB_SYS_CODE,
                               SM004M.PGM_ID,
                               SM004M.PGM_NAME_DESC
                        FROM   SM004M
                        WHERE 1 = 1
                          AND SM004M.NATN_LNGU_CODE = 'KO'
                          AND SM004M.PGM_USE_INDC = 'Y'
                        ORDER BY SM004M.PGM_ID
                        )
               )
         )
WHERE  1 = 1
ORDER  BY PGM_ID 

 

by 마농 [2018.07.04 14:23:09]

쿼리도 좀 불필요한 부분이 보이긴 하지만(예 : rn2 는 무의미)
쿼리문제가 아니라 데이터 문제로 보이네요.
PGM_ID 앞 5자리와 SUB_SYS_CODE 가 불일치 한것 같네요.


by 거제도원주민 [2018.07.04 14:32:52]

감사합니다.

데이타 검증해 보니 과거 데이타에 불일치한 정보가

남아 있었네요.... 정말 감사합니다.

다시한번 생각 하게 됩니다. 이런 생각없이 프로그램 짜고 있다니...

늘 감사합니다.

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