행-열 변환 구현 방법: 1. PIVOT() 함수를 사용하여 "SELECT * FROM (data set) PIVOT (SUM(Score) FOR Coursename IN (변환된 열) 구문으로 행-열 변환을 구현합니다. 2. unpivot() 함수를 사용하여 열 전환을 실현합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Oracle 11g 버전, Dell G3 컴퓨터.
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
학생을 그룹화하기 위해 그룹별을 사용합니다. , 그리고 디코드를 사용하여 해당 과목의 성적 값을 변환한 다음 이를 합산하여 성적의 결과 값을 얻습니다.
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 행부터 열까지의 학생 점수 테이블의 기본 데이터는 학생의 교과 점수에 해당하는 기록입니다. 그런 다음 행을 열로 변환하고 각 열(수학, 영어, 중국어)의 학생 점수에 해당하는 기록으로 변환했습니다. 그래서 이번 글에서는 이전에 변환한 학생 점수 테이블(백업 테이블 Score_copy)을 다시 열과 행으로 변환하여 원본 데이터로 변환해 보도록 하겠습니다. 사례 데이터는 다음과 같습니다.
그럼 컬럼 전환을 어떻게 구현하나요? 아래에 두 가지 일반적인 방법을 소개합니다.
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(列名))
구현 코드는 다음과 같습니다.
select stuname, coursename ,score from score_copy t unpivot (score for coursename in (英语,数学,语文))
추천 튜토리얼: "
Oracle Tutorial"
위 내용은 Oracle에서 행-열 변환을 달성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!