=================================================================
CONNECT BY절 이용
SELECT /*+ ORDERED USE_NL(D1,D2,B)
INDEX_DESC(B IDX_TEST_LIST_01) */
D2.NO, B.*
FROM (
SELECT '20080601' S_DATE,
3 DAY_NUM,
5 ROW_NUM
FROM DUAL A
) D1,
(
SELECT LEVEL NO
FROM DUAL CONNECT BY LEVEL <= 5
) D2, TEST_LIST B
WHERE D2.NO <= DAY_NUM
AND COL3 < TRUNC(TO_DATE(S_DATE,'YYYYMMDD'))-D2.NO+2
AND COL3 >= TRUNC(TO_DATE(S_DATE,'YYYYMMDD'))-D2.NO+1
AND ROWNUM <= D2.NO * D1.ROW_NUM
AND ROWNUM <= DAY_NUM * D1.ROW_NUM;
=================================================================
이쁘고 깔끔하게 COPY_T... 이용 위 쿼리와 로직은 같음
SELECT /*+ ORDERED USE_NL(D1,A, B)
INDEX_DESC(B IDX_TEST_LIST_01) */
A.NO, B.*
FROM (
SELECT '20080601' S_DATE,
3 DAY_NUM,
5 ROW_NUM
FROM DUAL
) D1, COPY_T A, TEST_LIST B
WHERE A.NO <= DAY_NUM
AND COL3 < TRUNC(TO_DATE(S_DATE,'YYYYMMDD'))-A.NO+2
AND COL3 >= TRUNC(TO_DATE(S_DATE,'YYYYMMDD'))-A.NO+1
AND ROWNUM <= A.NO * D1.ROW_NUM
AND ROWNUM <= DAY_NUM * D1.ROW_NUM;
=================================================================
뭐.. 여러 방법중에 예로 UNION ALL을 이용해서 퍼포먼스는 더 좋게 할 수 있겠습니다만,
이런 문제에 대해서 한번 고민해 보는것두 괜찮을듯 싶어서 내봤습니다..^^*