오라클 Oracle 세로 칼럼 값 가로로 펼치기


경우에 따라 선 단일 Column 조회 값을 가로로 펼쳐야 할 경우도 있습니다.


이 포스팅에선 이에 대해서 알아보겠습니다.

 

SELECT OBJ#,
  COL#,
  NAME
FROM SYS.COL$
WHERE OBJ# = 16
  AND COL# < 6

 

 OBJ#

 COL#

 NAME

 16

 1

 TS#

 16

 2

 NAME

 16

 3

 OWNER#

 16

 4

 ONLINE$

 16

 5

 CONTENTS$

 

이 테이블을 COL# 값을 기준으로 가로로 펼치는 작업을 해보겠습니다.

 

우선 Row 수는 그대로 둔 체, COL#을 column 형태로 변경합니다.

 

 

 SELECT OBJ#,
   DECODE(COL#, 1, NAME, NULL) COL_1,
   DECODE(COL#, 2, NAME, NULL) COL_2,
   DECODE(COL#, 3, NAME, NULL) COL_3,
   DECODE(COL#, 4, NAME, NULL) COL_4,
   DECODE(COL#, 5, NAME, NULL) COL_5
 FROM SYS.COL$
 WHERE OBJ# = 16
   AND COL# < 6;

 

 

 이렇게 조회된 값들을 GROUP BY 하여 MAX 처리 합니다.

 

 

 SELECT MAX(OBJ#) OBJ#,
   MAX(COL_1) COL1,
   MAX(COL_2) COL2,
   MAX(COL_3) COL3,
   MAX(COL_4) COL4,
   MAX(COL_5) COL5
 FROM (
    SELECT OBJ#,
      DECODE(COL#, 1, NAME, NULL) COL_1,
      DECODE(COL#, 2, NAME, NULL) COL_2,
      DECODE(COL#, 3, NAME, NULL) COL_3,
      DECODE(COL#, 4, NAME, NULL) COL_4,
      DECODE(COL#, 5, NAME, NULL) COL_5
    FROM SYS.COL$
    WHERE OBJ# = 16
      AND COL# < 6);

 


 OBJ#

 COL_1

 COL_2

 COL_3

 COL_4

 COL_5

 16

 TS#

 NAME

 OWNER#

 ONLINE$

 CONTENTS$

 

만약 여러개의 OBJ# 값이 있고, 이걸 분리하고 싶다면...

 

 

 SELECT OBJ#,
   MAX(COL_1) COL1,
   MAX(COL_2) COL2,
   MAX(COL_3) COL3,
   MAX(COL_4) COL4,
   MAX(COL_5) COL5
 FROM (
    SELECT OBJ#,
      DECODE(COL#, 1, NAME, NULL) COL_1,
      DECODE(COL#, 2, NAME, NULL) COL_2,
      DECODE(COL#, 3, NAME, NULL) COL_3,
      DECODE(COL#, 4, NAME, NULL) COL_4,
      DECODE(COL#, 5, NAME, NULL) COL_5
    FROM SYS.COL$
    WHERE OBJ# IN (16,
          20)
      AND COL# < 6)
 GROUP BY OBJ#;

 

 

 OBJ#

 COL_1

 COL_2

 COL_3

 COL_4

 COL_5

 16

 TS#

 NAME

 OWNER#

 ONLINE$

 CONTENTS$

 20

 OBJ#

 BO#

 COL#

 POS#

 SEGCOL#

 

이렇게 하시면 됩니다.

 

 

Posted by 쭈니루
TAG

댓글을 달아 주세요