연관쿼리에 대하여 도와주세요. 0 6 1,836

by 오라클초보 [SQL Query] [2013.10.25 16:37:29]



안녕하세요.
아래의 표와 같이 결재여부가 'Y'인것 중에서 다음일련번호을 구하는 쿼리를 만들려고 하는데 도움을
주셨으면 합니다.
일련번호는 순서적이 아니라 중간 빠질수 있고 마지막은 첫번째 일련번호이어야 합니다.

* 데이터 * 결과
사원명 결재여부 일련번호 사원명 일련번호 NEXT일련번호
김길동 Y 2 김길동 2 3
마길동 Y 3 마길동 3 8
박길동 N 5 이길동 8 11
손길동 N 6 정길동 11 14
이길동 Y 8 사길동 14 16
정길동 Y 11 임길동 16 2
석길동 N 13
사길동 Y 14
임길동 Y 16

감사합니다.














by 우리집아찌 [2013.10.25 16:49:47]
 
-- 좀 복잡해졌네요.. 
WITH T ( EMP_NM , YN ,SEQ ) AS (
SELECT '김길동','Y',2 FROM DUAL UNION ALL
SELECT '마길동','Y',3 FROM DUAL UNION ALL
SELECT '박길동','N',5 FROM DUAL UNION ALL
SELECT '손길동','N',6 FROM DUAL UNION ALL
SELECT '이길동','Y',8 FROM DUAL UNION ALL
SELECT '정길동','Y',11 FROM DUAL UNION ALL
SELECT '석길동','N',13 FROM DUAL UNION ALL
SELECT '사길동','Y',14 FROM DUAL UNION ALL
SELECT '임길동','Y',16 FROM DUAL 
)

SELECT EMP_NM ,SEQ ,
 CASE WHEN MAX(SEQ) OVER(ORDER BY NULL) = SEQ 
 THEN MIN(SEQ) OVER(ORDER BY NULL)
 ELSE LEAD(SEQ) OVER(ORDER BY ROWNUM) 
 END NEXT_SEQ 
FROM T
WHERE YN = 'Y'

by 오라클초보 [2013.10.28 08:53:13]

도움 감사합니다.


by 아린 [2013.10.25 16:59:04]
SELECT 사원명, 일련번호
     , NVL(LEAD(일련번호) OVER(ORDER BY 일련번호), MIN(일련번호) OVER()) NEXT
  FROM t
 WHERE 결재여부 = 'Y' 

by 우리집아찌 [2013.10.25 17:01:43]
간단하게 나오는군요...

by 아린 [2013.10.25 17:10:12]
LAG, LEAD 함수는 순환은 안되나 보네요.

by 오라클초보 [2013.10.29 15:10:22]

감사합니다. 도움이 많이 되었습니다.

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