DB초보자, 최소값부터 최대값까지 증가 시키는 방법 0 7 1,107

by 꽃보다서준 [PL/SQL] [2016.11.14 13:44:32]


안녕하세요.

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 을 사용하면 가능한 것인지 잘 몰라서요..

답변 부탁드리겠습니다.^^

by 마농 [2016.11.14 14:21:19]
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
;

 


by 꽃보다서준 [2016.11.14 14:53:27]

안녕하세요! 답변 너무 감사합니다!

궁금증이 해결 되었는데요.

근데 또 궁금한게 생겼습니다.

현재는 최대값이 눈에 보여서  CONNECT BY LEVEL에서 9까지만 선택되게 했는데,

데이터가 가령 10만개 정도 되고, 최대값을 찾아보니 '3000' 이런식일때는

직접 테이블에서 최대값(3000)을 찾은 후 (CONNECT BY LEVEL <= 3000) 입력해 주어야 하는건가요?


by 우리집아찌 [2016.11.14 14:22:01]

테이블 두개 만드셔서 크로스 조인 거시면 됩니다 


by 우리집아찌 [2016.11.14 15:20:08]

table 에서 max x max y 가져오면 되죠


by 꽃보다서준 [2016.11.14 15:28:53]

ㅎㅎ 감사합니다!
완전 초보라서 생각지도 못했는데,,,

너무 감사드립니다


by 마농 [2016.11.14 15:25:37]

최대값보다 큰수를 주시면 됩니다만...

3000 이면 좀 크네요?

성능상 문제는 없는지 검토해 보셔야 할 듯.

 

그리고 매번 최대값을 찾을 필요는 없습니다.

그냥 이정도면 충분하다라고 생각하시는 값으로 고정하면 됩니다.


by 꽃보다서준 [2016.11.14 15:30:01]

우리집아찌님께서 알려주신 방식대로

( select max(Max_X) from 테이블명) 하니

해당 테이블에서 Max_X의 최대값을 가져와서 제가 생각하는데로 되더라구요.

답변 감사드립니다^^

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