먼저 데이터 부터 보여드립니다. 구조는 간단합니다.
테이블명은 SEQ_TB로 할께요.
SEQ | TIME |
1 | 10:00 |
2 | 11:00 |
3 | 12:00 |
4 | 13:00 |
5 | 14:00 |
6 | 15:00 |
7 | 16:00 |
SEQ_TB 테입블에 7개의 ROW가 있습니다.
이 7개의 ROW들을 3개의 로우로 묶습니다.
대신 묶는 방식은 이렇습니다.
SEQ를 1~3 까지 묶고 다음 2~4를 묶고 3~5.... 최종은 5~7 까지묶습니다.
그리고 묶은것을 그룹을 정해 줍니다.
그룹정해주는 방식은 예를들어 SEQ 칼럼의 1~3 묶은것을 제일 숫자가 낮은 SEQ 로 정하니 1이 됩니다.
이어서 SEQ 칼럼의 2~4 묶은것을 제일 숫자가 낮은 SEQ로 정하니 2가 됩니다.... 그리고 최종은 5~7은 그룹이 5가 되겠지요.
최종적으로 나와야 되는것은 아래와 같습니다. TIME도 같이 표기되어야 합니다.
GROUP | SEQ | TIME |
1 | 1 | 10:00 |
1 | 2 | 11:00 |
1 | 3 | 12:00 |
2 | 2 | 11:00 |
2 | 3 | 12:00 |
2 | 4 | 13:00 |
3 | 3 | 12:00 |
3 | 4 | 13:00 |
3 | 5 | 14:00 |
4 | 4 | 13:00 |
4 | 5 | 14:00 |
4 | 6 | 15:00 |
5 | 5 | 14:00 |
5 | 6 | 15:00 |
5 | 7 | 16:00 |
ORACLE 11g SQL 로 작성중인데 멍하니 모니터만 바라보고만 있습니다.
WITH seq_tb AS ( SELECT 1 seq, '10:00' tm FROM dual UNION ALL SELECT 2, '11:00' FROM dual UNION ALL SELECT 3, '12:00' FROM dual UNION ALL SELECT 4, '13:00' FROM dual UNION ALL SELECT 5, '14:00' FROM dual UNION ALL SELECT 6, '15:00' FROM dual UNION ALL SELECT 7, '16:00' FROM dual ) SELECT CONNECT_BY_ROOT(seq) grp , seq , tm FROM seq_tb START WITH seq <= (SELECT MAX(seq) - 2 FROM seq_tb) CONNECT BY PRIOR seq + 1 = seq AND LEVEL <= 3 ;
group, time 등의 예약어를 명칭으로 사용하는 것은 좋지 않습니다.