15 | 2 | 19 | 6 | 23 |
22 | 14 | 1 | 18 | 10 |
9 | 21 | 13 | 5 | 17 |
16 | 8 | 25 | 12 | 4 |
3 | 20 | 7 | 24 | 11 |
1 2 3 4 5 6 | SELECT LEVEL NO ,MOD((:NUM + 1) / 2 + LEVEL - 2,:NUM) + 1 X ,:NUM - MOD((:NUM + 1) / 2 + LEVEL - 1,:NUM) Y FROM DUAL CONNECT BY LEVEL <= :NUM |
NO | X | Y | |
1 | 3 | 2 | <== 1사이클 시작포인트 |
2 | 4 | 1 | <== 2사이클 시작포인트 |
3 | 5 | 5 | <== 3사이클 시작포인트 |
4 | 1 | 4 | <== 4사이클 시작포인트 |
5 | 2 | 3 | <== 5사이클 시작포인트 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SELECT ((A. NO -1) * :NUM) + B. NO AS NO , CASE WHEN A.X - B.MV > 0 THEN A.X - B.MV ELSE :NUM + (A.X - B.MV) END AS X , CASE WHEN A.Y - B.MV > 0 THEN A.Y - B.MV ELSE :NUM + (A.Y - B.MV) END AS Y FROM ( SELECT LEVEL NO ,MOD((:NUM + 1) / 2 + LEVEL - 2,:NUM) + 1 X ,:NUM - MOD((:NUM + 1) / 2 + LEVEL - 1,:NUM) Y FROM DUAL CONNECT BY LEVEL <= :NUM) A ,( SELECT LEVEL NO , LEVEL - 1 MV FROM DUAL CONNECT BY LEVEL <= :NUM) B |
NO | X | Y |
1 | 3 | 2 |
2 | 2 | 1 |
3 | 1 | 5 |
4 | 5 | 4 |
5 | 4 | 3 |
6 | 4 | 1 |
7 | 3 | 5 |
8 | 2 | 4 |
9 | 1 | 3 |
10 | 5 | 2 |
11 | 5 | 5 |
12 | 4 | 4 |
13 | 3 | 3 |
14 | 2 | 2 |
15 | 1 | 1 |
16 | 1 | 4 |
17 | 5 | 3 |
18 | 4 | 2 |
19 | 3 | 1 |
20 | 2 | 5 |
21 | 2 | 3 |
22 | 1 | 2 |
23 | 5 | 1 |
24 | 4 | 5 |
25 | 3 | 4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | -- 9i 계층쿼리 SELECT TRIM( MAX (SYS_CONNECT_BY_PATH(LPAD( NO ,LENGTH(POWER(:NUM,2)), '0' ), ' ' ))) BANGGIN FROM ( SELECT ((A. NO -1) * :NUM) + B. NO NO , CASE WHEN A.X - B.MV > 0 THEN A.X - B.MV ELSE :NUM + (A.X - B.MV) END X , CASE WHEN A.Y - B.MV > 0 THEN A.Y - B.MV ELSE :NUM + (A.Y - B.MV) END Y FROM ( SELECT LEVEL NO ,MOD((:NUM + 1) / 2 + LEVEL - 2,:NUM) + 1 X ,:NUM - MOD((:NUM + 1) / 2 + LEVEL - 1,:NUM) Y FROM DUAL CONNECT BY LEVEL <= :NUM) A ,( SELECT LEVEL NO , LEVEL - 1 MV FROM DUAL CONNECT BY LEVEL <= :NUM) B ) START WITH X = 1 CONNECT BY PRIOR X = X - 1 AND PRIOR Y = Y GROUP BY Y ORDER BY Y; |