첨부파일
문제: 19건의 자룔를 4건씩 묶어서 한 줄에 보여주고 그 앞에 해당하는 행의 번호를 보여주는 형식으로 출력하라
(그 앞에 행의 번호를 출력하라)
힌트는 일단 인라인뷰를 써야한다. 그리고 DECODE를 사용한다.
SELECT rownum no
, gubun
FROM sam_tab02;
, gubun
FROM sam_tab02;
번호를 이용해서 앞에서 부터 4개씩 다시 동일한 번호를 순차적으로 부여한다.
SELECT CEIL(NO/4) rno
, no
, gubun
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
);
, no
, gubun
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
);
4개씩 묶인것들에 순서를 정해준다.
SELECT CEIL(NO/4) rno --컬럼의 주소
, MOD(NO,4) cno --컬럼의 순서
, no
, gubun
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
);
, MOD(NO,4) cno --컬럼의 순서
, no
, gubun
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
);
같은 열에 나오는 gubun을 cno의 수에 의해 다른 행으로 보낸다.
SELECT CEIL(NO/4) rno --컬럼의 주소
, MOD(NO,4) cno --컬럼의 순서
, DECODE(MOD(NO,4),1,gubun) C1
, DECODE(MOD(NO,4),2,gubun) C2
, DECODE(MOD(NO,4),3,gubun) C3
, DECODE(MOD(NO,4),0,gubun) C4
, no
, gubun
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
);
, MOD(NO,4) cno --컬럼의 순서
, DECODE(MOD(NO,4),1,gubun) C1
, DECODE(MOD(NO,4),2,gubun) C2
, DECODE(MOD(NO,4),3,gubun) C3
, DECODE(MOD(NO,4),0,gubun) C4
, no
, gubun
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
);
rno의 값을 그룹으로 묶어주면 된다.
SELECT MAX(CEIL(NO/4)) rno --컬럼의 주소
, MAX(DECODE(MOD(NO,4),1,gubun)) C1
, MAX(DECODE(MOD(NO,4),2,gubun)) C2
, MAX(DECODE(MOD(NO,4),3,gubun)) C3
, MAX(DECODE(MOD(NO,4),0,gubun)) C4
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
)
GROUP BY CEIL(NO/4)
ORDER BY RNO;
, MAX(DECODE(MOD(NO,4),1,gubun)) C1
, MAX(DECODE(MOD(NO,4),2,gubun)) C2
, MAX(DECODE(MOD(NO,4),3,gubun)) C3
, MAX(DECODE(MOD(NO,4),0,gubun)) C4
FROM (
SELECT rownum no
, gubun
FROM sam_tab02
)
GROUP BY CEIL(NO/4)
ORDER BY RNO;
첨부파일
문제 TEMP자료를 이용해서 한행에 3명의 사번과 성명을 보여주는 쿼리를 작성하시오
SELECT id1
, name1
, id2
, name2
, id3
, name3
FROM (
SELECT MAX(NO) no
, MAX(DECODE(MOD(NO,3),1,emp_id)) id1
, MAX(DECODE(MOD(NO,3),1,emp_name)) name1
, MAX(DECODE(MOD(NO,3),2,emp_id)) id2
, MAX(DECODE(MOD(NO,3),2,emp_name)) name2
, MAX(DECODE(MOD(NO,3),0,emp_id)) id3
, MAX(DECODE(MOD(NO,3),0,emp_name)) name3
FROM (
SELECT ROWNUM no
, emp_id
, emp_name
FROM temp
WHERE emp_id > 0
)
GROUP BY ceil(no/3)
)
ORDER BY no
, name1
, id2
, name2
, id3
, name3
FROM (
SELECT MAX(NO) no
, MAX(DECODE(MOD(NO,3),1,emp_id)) id1
, MAX(DECODE(MOD(NO,3),1,emp_name)) name1
, MAX(DECODE(MOD(NO,3),2,emp_id)) id2
, MAX(DECODE(MOD(NO,3),2,emp_name)) name2
, MAX(DECODE(MOD(NO,3),0,emp_id)) id3
, MAX(DECODE(MOD(NO,3),0,emp_name)) name3
FROM (
SELECT ROWNUM no
, emp_id
, emp_name
FROM temp
WHERE emp_id > 0
)
GROUP BY ceil(no/3)
)
ORDER BY no
'자바개발과정 > 오라클(Oracle)' 카테고리의 다른 글
토드 - 스키마 정보 저장하는 방법(테이블 정보, 칼럼의 코멘트 등등) (0) | 2008.07.24 |
---|---|
토드 - 실행 계획 (0) | 2008.07.23 |
대용량데이터 - 토드에서 테이블 생성과 데이터 입력 (0) | 2008.07.22 |