oracle unpivot 索引_oracle 11g 行列转换之unpivot、pivot
一、?? ?列?? ?轉(zhuǎn)?? ?行
create table STU_ROW2COL
(
id????? VARCHAR2(10),
intname VARCHAR2(10),
subject VARCHAR2(20),
grade?? NUMBER
)
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('1', 'ZORRO', '語(yǔ)文', 70);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('2', 'ZORRO', '數(shù)學(xué)', 80);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('3', 'ZORRO', '英語(yǔ)', 75);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('4', 'SEKER', '語(yǔ)文', 65);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('5', 'SEKER', '數(shù)學(xué)', 75);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('6', 'SEKER', '英語(yǔ)', 60);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('7', 'BLUES', '語(yǔ)文', 60);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('8', 'BLUES', '數(shù)學(xué)', 90);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('9', 'PG', '數(shù)學(xué)', 80);
insert into stu_row2col (ID, INTNAME, SUBJECT, GRADE) values ('10', 'PG', '英語(yǔ)', 90);
SQL>? select t.* from stu_row2col t ;
ID???????? INTNAME??? SUBJECT?????????????????? GRADE
---------- ---------- -------------------- ----------
11???????? ZORRO????? 語(yǔ)文???????????????????????? 77
1????????? ZORRO????? 語(yǔ)文???????????????????????? 70
2????????? ZORRO????? 數(shù)學(xué)???????????????????????? 80
3????????? ZORRO????? 英語(yǔ)???????????????????????? 75
4????????? SEKER????? 語(yǔ)文???????????????????????? 65
5????????? SEKER????? 數(shù)學(xué)???????????????????????? 75
6????????? SEKER????? 英語(yǔ)???????????????????????? 60
7????????? BLUES????? 語(yǔ)文???????????????????????? 60
8????????? BLUES????? 數(shù)學(xué)???????????????????????? 90
9????????? PG???????? 數(shù)學(xué)???????????????????????? 80
10???????? PG???????? 英語(yǔ)???????????????????????? 90
想要實(shí)現(xiàn)行專列, 就是輸出結(jié)果是這樣的:
SQL>? select * from ( select t.intname,t.subject,t.grade from stu_row2col t)
pivot(sum(grade) for subject in ('語(yǔ)文' 語(yǔ)文,'數(shù)學(xué)' 數(shù)學(xué),'英語(yǔ)' 英語(yǔ)))? ;
INTNAME??????????? 語(yǔ)文???????? 數(shù)學(xué)???????? 英語(yǔ)
---------- ---------- ---------- ----------
SEKER????????????? 65???????? 75???????? 60
BLUES????????????? 60???????? 90
PG??????????????????????????? 80???????? 90
ZORRO???????????? 147???????? 80???????? 75
二、?? ?行?? ?轉(zhuǎn)?? ?列
創(chuàng)建一個(gè)視圖:
create or replace view stu_col2row as
select "INTNAME","語(yǔ)文","數(shù)學(xué)","英語(yǔ)" from ( select t.intname,t.subject,t.grade from stu_row2col t) pivot(sum(grade) for subject in ('語(yǔ)文' 語(yǔ)文,'數(shù)學(xué)' 數(shù)學(xué),'英語(yǔ)' 英語(yǔ)));
SQL>? select INTNAME 姓名,km 科目, fs 分?jǐn)?shù) from stu_col2row unpivot(fs for km in(語(yǔ)文,數(shù)學(xué),英語(yǔ)));
姓名?????? 科目???????? 分?jǐn)?shù)
---------- ---- ----------
SEKER????? 語(yǔ)文???????? 65
SEKER????? 數(shù)學(xué)???????? 75
SEKER????? 英語(yǔ)???????? 60
BLUES????? 語(yǔ)文???????? 60
BLUES????? 數(shù)學(xué)???????? 90
PG???????? 數(shù)學(xué)???????? 80
PG???????? 英語(yǔ)???????? 90
ZORRO????? 語(yǔ)文???????? 70
ZORRO????? 數(shù)學(xué)???????? 80
ZORRO????? 英語(yǔ)???????? 75
總結(jié)
以上是生活随笔為你收集整理的oracle unpivot 索引_oracle 11g 行列转换之unpivot、pivot的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSH协议详解
- 下一篇: win7开启uasp协议_UASP与US