안녕하세요.
DB 공부를 하고있는 초보자 입니다.
ORACLE 혹은 MSSQL 에서
테이블
Index | Min X | Min Y | Min X | MAX Y |
A | 1 | 2 | 2 | 4 |
B | 2 | 1 | 5 | 2 |
C | 3 | 1 | 4 | 2 |
결과
Index | X | Y |
A | 1 | 2 |
A | 1 | 3 |
A | 1 | 4 |
A | 2 | 2 |
A | 2 | 3 |
A | 2 | 4 |
B | 2 | 1 |
B | 2 | 2 |
B | 3 | 1 |
B | 3 | 2 |
B | 4 | 1 |
B | 4 | 2 |
B | 5 | 1 |
B | 5 | 2 |
C | 3 | 1 |
C | 3 | 2 |
C | 4 | 1 |
C | 4 | 2 |
테이블에 X최소값,Y최소값, X최대값,Y최대값이 있을때
Y최소값을 Y최대값까지 1씩 증가시키고,
Y가 최대값까지 갔을때 X가 1 증가하면서 Y는 최소값으로 초기화되고,
반복하여 X도 최대값까지 도달하면
다음 인덱스로 넘어가는 방식의
테이블 결과를 얻을 수 있는 방법이 있는가 싶어서 질문 드렸습니다.
이런 경우는 DB에서 불가능 한 것인지, 혹은 PL/SQL 을 사용하면 가능한 것인지 잘 몰라서요..
답변 부탁드리겠습니다.^^
WITH t (Idx, Min_X, Min_Y, Max_X, Max_Y) AS ( SELECT 'A', 1, 2, 2, 4 FROM dual UNION ALL SELECT 'B', 2, 1, 5, 2 FROM dual UNION ALL SELECT 'C', 3, 1, 4, 2 FROM dual ) SELECT idx, x, y FROM t a , (SELECT LEVEL x FROM dual CONNECT BY LEVEL <= 9) x , (SELECT LEVEL y FROM dual CONNECT BY LEVEL <= 9) y WHERE x BETWEEN min_x AND max_x AND y BETWEEN min_y AND max_y ORDER BY idx, x, y ;