>데이터 베이스 >Oracle >Oracle 가로 테이블을 세로 테이블로 변환하는 방법

Oracle 가로 테이블을 세로 테이블로 변환하는 방법

WBOY
WBOY원래의
2022-05-24 15:23:065961검색

Oracle에서는 피봇() 함수를 사용하여 가로 테이블을 세로 테이블로 변환할 수 있습니다. 이 함수는 행을 열로 변환하는 데 사용됩니다. 구문은 "SELECT * FROM(데이터 쿼리 세트) PIVOT(SUM(행) to 열) 행 대 ​​열이 되어야 하는 열의 값)(변환된 열의 값))"입니다.

Oracle 가로 테이블을 세로 테이블로 변환하는 방법

이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.

Oracle 가로 테이블을 세로 테이블로 변환하는 방법

Oracle 행-열 변환은 특정 필드의 값을 고유 값으로 사용한 다음 다른 필드의 행 값을 해당 열 값으로 변환하는 것입니다. 여기서는 여전히 우리 시스템의 학생 점수 테이블을 예로 사용합니다. 점수 테이블 기록(행)은 각 과목의 각 학생의 점수에 해당합니다. 그런 다음 각 학생의 모든 과목을 하나로 표시하는 보고서를 만들어야 합니다. 열입니다. 사례 데이터는 다음과 같습니다.

Oracle 가로 테이블을 세로 테이블로 변환하는 방법

그렇다면 어떻게 달성할 수 있을까요? 몇 가지 방법을 하나씩 설명하겠습니다.

1 먼저 Oracle 그룹화(그룹별)를 사용할 수 있어야 한다고 생각해야 합니다. 구현 코드는 다음과 같습니다.

select c.stuname,
       --利用分组聚合函数
       sum(decode(b.coursename, '英语(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '数学(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '语文(2018上学期)', t.score, 0)) as "英语(2018上学期)"
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid
 group by c.stuname

학생을 그룹화하기 위해 그룹별을 사용합니다. , 그리고 디코드를 사용하여 해당 과목의 성적 값을 변환한 다음 이를 합산하여 성적의 결과 값을 얻습니다.

Oracle 가로 테이블을 세로 테이블로 변환하는 방법

2. -이 행 대 열 요구 사항을 완벽하게 해결할 수 있는 함수 PIVOT에서 구체적인 구문 구조는 다음과 같습니다.

SELECT * FROM (数据查询集)
PIVOT 
(
 SUM(Score/*行转列后 列的值*/) FOR 
 coursename/*需要行转列的列*/ IN (转换后列的值)
)

구체적인 코드는 다음과 같습니다.

select * from  (select c.stuname,
       b.coursename,
       t.score
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid )  /*数据源*/
PIVOT 
(
 SUM(score/*行转列后 列的值*/) 
 FOR coursename/*需要行转列的列*/ IN ('英语(2018上学期)' as 英语,'数学(2018上学期)' as 数学,'语文(2018上学期)' as 语文 )
) ;

결과는 다음과 같습니다.

Oracle 가로 테이블을 세로 테이블로 변환하는 방법

추천 튜토리얼 : "Oracle 비디오 튜토리얼"

위 내용은 Oracle 가로 테이블을 세로 테이블로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.