본문 바로가기
내가 공부하려고 올리는/DB

오라클 - Row 단위 자료를 Column 단위로 변경하기

by 결딴력 2021. 10. 27.
반응형

실습 테이블을 조회해보겠습니다.

 

SELECT * FROM sam_tab02를 입력한 결과는 다음과 같습니다.

 

실행결과

다음과 같은 조회 결과를

아래와 같은 테이블로 조회하는 방법을 알아보겠습니다.

원하는 조회 결과

우선 행에 번호를 매기겠습니다.

실행문

위와 같은 명령어를 입력하여,

다음과 같은 테이블을 얻었습니다.

실행결과

저희가 원하는 결과물에서는

가장 위의 값 'F107'부터

가장 아래 값 'F125'까지

Row를 4개씩 묶어서

Column으로 변경하는 것입니다.

 

따라서, RNO를 4개씩 동일한 수로 묶습니다.

이때는 CEIL 함수를 사용합니다.

CEIL함수는 값을 올리는 함수로

RNO의 값을 4로 나눈 값을 올림 하면

4개씩 동일한 값을 얻을 수 있습니다.

 

다음과 같이 명령어를 입력하면

실행문

다음과 같은 실행결과를 얻을 수 있습니다.

실행결과

자 이제 4개씩 묶은 번호를 이용하여

컬럼값을 가로로 정렬해보겠습니다.

값을 정렬하는 데는 DECODE 함수를 사용하겠습니다.

DECODE는 DECODE(A, B, C)라고 했을 때,

A의 값이 B이면 C를 출력하는 함수를 말합니다.

이를 이용하여,

ROWNUM을 4로 나누고 남은 나머지 값이

1인 경우와, 2인 경우, 3인 경우, 0인 경우로 나눠서

그에 맞는 값을 가로로 정렬합니다.

 

다음과 같은 코드를 작성하면,

실행문

다음과 같은 실행결과를 얻을 수 있습니다.

실행결과

위와 같은 결과물을 최종 결과물과 같이 변경하기 위해서는

RNO별로 하나의 행으로 정리될 필요가 있습니다.

이를 위해서는 MAX함수를 사용합니다.

GROUP BY 함수를 이용해서 그룹별로 정리를 하고,

그룹 별 최댓값을 출력하는 형식을 사용합니다.

결과물을 순서대로 출력하기 위해서

마지막에 ORDER BY 함수를 사용해 RNO 순으로 정렬합니다.

 

실행문

위와 같은 코드를 입력하면

최종적으로 우리가 원하던 결과물을 얻을 수 있습니다.

최종 결과물

 

반응형

댓글