1. 각 ROW 데이터가 몇 번째 행의 몇 번째 컬럼에 위치해야 하는지를 결정
2. 예를 들어서 아래와 같은 데이터가 있으며 한 행에 4개의 컬럼으로 표시하고 싶다고 할 경우 각 위치는 다음과 같다.
[원본자료] EMP_ID ---- A001 -> 1, 1 B001 -> 1, 2 C001 -> 1, 3 D001 -> 1, 4 E001 -> 2, 1 F001 -> 2, 2 G001 -> 2, 3 H001 -> 2, 4 I001 -> 3, 1 J001 -> 3, 2 K001 -> 3, 3 L001 -> 3, 4
3. 위치를 결정했으면 해당 위치 값을 ROWNUM과 CEIL, MOD를 통해서 만든다.
SELECT NO , CEIL(NO/4) AS ROWINDEX , MOD(NO, 4) AS COLINDEX , EMP_ID FROM ( SELECT ROWNUM AS NO , EMP_ID FROM TEMP )▶결과는 다음과 같다(COLINDEX값이 0인 경우를 좌표에서는 4번째 위치라고 생각)
NO ROWINDEX COLINDEX EMP_ID 1 1 1 A001 2 1 2 B001 3 1 3 C001 4 1 0 D001 5 2 1 E001 [중략] 12 3 0 L001
4. 다음으로 각 행의 데이터를 DECODE 함수를 이용하여 좌표에 맞게 위치시킨다.
SELECT CEIL(NO/4) AS ROWINDEX , DECODE(MOD(NO, 4), 1, EMP_ID) AS COL1 , DECODE(MOD(NO, 4), 2, EMP_ID) AS COL2 , DECODE(MOD(NO, 4), 3, EMP_ID) AS COL3 , DECODE(MOD(NO, 4), 0, EMP_ID) AS COL4 FROM ( SELECT ROWNUM AS NO , EMP_ID FROM TEMP )▶결과는 다음과 같다.
ROWINDEX COL1 COL2 COL3 COL4 1 A001 1 B001 1 C001 1 D001 2 E001 2 F001 2 G001 2 H001 [중략]
5. 마지막으로 위 결과를 ROWINDEX 기준으로 GROUPING 해준다.
SELECT CEIL(NO/4) AS ROWINDEX , MAX(DECODE(MOD(NO, 4), 1, EMP_ID)) AS COL1 , MAX(DECODE(MOD(NO, 4), 2, EMP_ID)) AS COL2 , MAX(DECODE(MOD(NO, 4), 3, EMP_ID)) AS COL3 , MAX(DECODE(MOD(NO, 4), 0, EMP_ID)) AS COL4 FROM ( SELECT ROWNUM AS NO , EMP_ID FROM TEMP ) GROUP BY CEIL(NO/4)
결과는 생략.
0 Comments:
댓글 쓰기