자바개발과정/오라클(Oracle)

행과 열 바꾸는 방법(복습) ROW와 COLUMN의 상호호환

경진 2008. 7. 28. 10:38

첨부파일



문제: 19건의 자룔를 4건씩 묶어서 한 줄에 보여주고 그 앞에 해당하는 행의 번호를 보여주는 형식으로 출력하라
(그 앞에 행의 번호를 출력하라)

힌트는 일단 인라인뷰를 써야한다. 그리고 DECODE를 사용한다.

SELECT rownum no
     , gubun
  FROM sam_tab02;

번호를 이용해서 앞에서 부터 4개씩 다시 동일한 번호를 순차적으로 부여한다.

SELECT CEIL(NO/4) rno
     , 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 
       );

같은 열에 나오는 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 
       );

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;

첨부파일


문제 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