>  기사  >  데이터 베이스  >  Oracle에서 행-열 변환을 달성하는 방법

Oracle에서 행-열 변환을 달성하는 방법

青灯夜游
青灯夜游원래의
2022-01-25 17:23:1148300검색

행-열 변환 구현 방법: 1. PIVOT() 함수를 사용하여 "SELECT * FROM (data set) PIVOT (SUM(Score) FOR Coursename IN (변환된 열) 구문으로 행-열 변환을 구현합니다. 2. unpivot() 함수를 사용하여 열 전환을 실현합니다.

Oracle에서 행-열 변환을 달성하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, 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 열 변환은 행의 고유 값에 따라 행의 열 필드를 변경하는 것입니다. 데이터의 여러 행으로 변환합니다. 예를 들어, 위의 Oracle 행부터 열까지의 학생 점수 테이블의 기본 데이터는 학생의 교과 점수에 해당하는 기록입니다. 그런 다음 행을 열로 변환하고 각 열(수학, 영어, 중국어)의 학생 점수에 해당하는 기록으로 변환했습니다. 그래서 이번 글에서는 이전에 변환한 학생 점수 테이블(백업 테이블 Score_copy)을 다시 열과 행으로 변환하여 원본 데이터로 변환해 보도록 하겠습니다. 사례 데이터는 다음과 같습니다.

Oracle에서 행-열 변환을 달성하는 방법

Oracle에서 행-열 변환을 달성하는 방법

그럼 컬럼 전환을 어떻게 구현하나요? 아래에 두 가지 일반적인 방법을 소개합니다.

1. 해당 열을 행 레코드로 완벽하게 변환할 수 있는 결합에 모두를 사용합니다. 구체적인 코드는 다음과 같습니다.

select t.stuname, '英语' as coursename ,t.英语 as score  from SCORE_COPY t
union all
select t.stuname, '数学' as coursename ,t.数学 as score  from SCORE_COPY t
union all
select t.stuname, '语文' as coursename ,t.语文 as score  from SCORE_COPY t

결과는 다음과 같습니다. . Oracle을 사용하면 자동으로 열 간 함수 unpivot도 이 문제를 완벽하게 해결할 수 있습니다. 구체적인 구문 구조는 다음과 같습니다.

select 字段 from 数据集
unpivot(自定义列名/*列的值*/ for 自定义列名 in(列名))

구현 코드는 다음과 같습니다. Oracle에서 행-열 변환을 달성하는 방법

select stuname, coursename ,score from
score_copy  t
unpivot
(score for coursename in (英语,数学,语文))

결과는 다음과 같습니다.

추천 튜토리얼: "

Oracle Tutorial

"Oracle에서 행-열 변환을 달성하는 방법

위 내용은 Oracle에서 행-열 변환을 달성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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