Jini's Blog

Ing...

  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Downloads
    • Dvd
    • Games
    • Software
      • Office
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Uncategorized

Row 단위 데이터를 Column 단위로 변환

 Jini     오전 2:34     Oracle     No comments   

■ 기본원리

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)

결과는 생략.
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
이메일로 전송BlogThis!X에 공유Facebook에서 공유
최근 게시물 이전 게시물 홈

0 Comments:

댓글 쓰기

Popular Posts

  • 구글 Blog + Markdown(StackEdit)
    구글 Blog + Markdown(StackEdit) StackEdit 구글 블로그는 글에 스타일을 적용하기 힘들다. 쉽게 스타일을 적용하기 위해 Markdown 문법 적용을 고려함. 방법을 찾던 중 Sta...
  • Design Patterns
    01. Iterator Pattern 왜 for문을 사용하지 않고 Iterator를 구현할까? 기존 구문 변경없이 loop 순환이 가능함. 즉 특정 구현에 의존하지 않을 수 있게 디자인이 가능함. 02. Adapter Pat...
  • 자신의 목표를 설정하는 방법
    1. 목표세우기 : 목표를 세울때는 가능한한 구체적이어야 한다. 또한 평가할 수 있고 실현 가능성이 있는 목표를 정한다. 장기 목표와 단기 목표로 나누고 데드라인을 분명히 하는 것이 좋다. 2. 우선순위 정하기 : 자신의 생활에서 중요한 순서대...
  • Redmine Text Format
    1. 글자색상 변경 %{color:red}dev% 2. 음영색상 변경 %{background:lightgreen} lightgreen% 3. 문단 넘버링(띄어쓰기 주의) # 큰 제목 ## 큰제목의 하위 제목 # 두번째 큰 제목 # ...

Recent Posts

Recent Posts Widget

Blog Archive

  • ►  2023 (4)
    • ►  3월 (1)
    • ►  2월 (1)
    • ►  1월 (2)
  • ►  2022 (1)
    • ►  2월 (1)
  • ►  2020 (8)
    • ►  7월 (1)
    • ►  4월 (3)
    • ►  3월 (4)
  • ►  2018 (1)
    • ►  7월 (1)
  • ►  2015 (1)
    • ►  5월 (1)
  • ►  2014 (5)
    • ►  8월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
    • ►  1월 (1)
  • ▼  2013 (10)
    • ►  12월 (1)
    • ►  11월 (1)
    • ►  9월 (2)
    • ▼  8월 (3)
      • Row 단위 데이터를 Column 단위로 변환
      • 오라클 한글깨짐 현상해결
      • 한글이 3byte인 경우 캐릭터셋 확인
    • ►  7월 (3)
  • ►  2012 (1)
    • ►  3월 (1)

Categories

  • 객체지향 (1)
  • 도서요약 (1)
  • 문법에서 문장까지 (2)
  • 일상 (1)
  • 자기계발 (1)
  • 책 (1)
  • 키보드 (1)
  • 키크론 (1)
  • blogspot (2)
  • error (1)
  • exception (1)
  • GIT (1)
  • JAVA (6)
  • JUNIT (1)
  • K8 PRO RGB (1)
  • kafka (1)
  • markdown (1)
  • mongodb (2)
  • mongotemplate (1)
  • optional (1)
  • Oracle (4)
  • Redmine (1)
  • spring (1)
  • stackedit (1)
  • troubleshooting (1)
  • Visual Studio (1)
  • Webflux (1)

Unordered List

Pages

  • 홈

Text Widget

Categories

Tags

Facebook

  • Home
  • Features
  • _Multi DropDown
  • __DropDown 1
  • __DropDown 2
  • __DropDown 3
  • _ShortCodes
  • _SiteMap
  • _Error Page
  • Documentation
  • Video Documentation
  • Download This Template

Footer Menu Widget

  • Home
  • About
  • Contact Us

Social Plugin

JINI. Powered by Blogger.

Copyright © Jini's Blog | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates