2017-01-26 12 views
0
SELECT * FROM(
SELECT * FROM(
SELECT PART_NO, SRC_PART_NO, CTNM_ENG, DESCRIPTION, USER_ID, REG_DT, CHG_DT, FLAG,  
(select count(*) from (SELECT PART_NO, SRC_PART_NO, CTNM_ENG, DESCRIPTION, USER_ID, REG_DT, CHG_DT, FLAG 
FROM GM_PART_LIST 
WHERE PART_NO LIKE '%' || '%' AND SRC_PART_NO LIKE '%' || '%' AND CTNM_ENG LIKE 'BOLT'|| '%' 
AND 1 = 1)) as total_count -- Nested subquery that return total count of record set. plug in same where conditions. 
FROM GM_PART_LIST 
WHERE PART_NO LIKE '%' || '%' AND SRC_PART_NO LIKE '%' || '%' AND CTNM_ENG LIKE 'BOLT'|| '%' 
AND 1 = 1 
ORDER BY PART_NO ASC)) 
WHERE ROWNUM BETWEEN 2 AND 202; 

위의 쿼리를 사용하면 1에서 200 사이의 값을 검색하면 어떻게 되는가? 레코드를 올바르게 가져 오지만, 2 또는 1보다 큰 다른 정수로 전환하면 레코드를 쿼리 할 수 ​​없습니다 ? 이 구문 문제입니까? 누구든지 제공 할 수있는 도움에 대해 미리 감사드립니다.ROWNUM 중첩 쿼리 사용 방법

답변

1

ROWNUM은 행이 where 조건에 대해 평가 될 때 지정됩니다. 행 소스의 첫 번째 행이 검색되고 ROWNUM=1이 지정됩니다. were 조건 중 하나가 ROWNUM > 1이면이 행이 선택되지 않습니다.

ROWNUM=1은 (다음은 where 절을 다시 지정) 등등으로 재 할당되었습니다. 입니다. 이는 결국 ROWNUM이 1에서 연속적으로 실행되어야하기 때문에 간격이있는 시퀀스가 ​​아니기 때문입니다. 따라서 ROWNUM이 1 (예 : where mod(ROWNUM, 2) = 0)이 될 수없는 조건은 제로 행을 생성하며 정확히 동일한 이유 때문입니다.

+0

정말 고마워요. :) – Jules