小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Oracle行轉(zhuǎn)列與列轉(zhuǎn)行

 狼圖騰1224 2017-01-31


一、行轉(zhuǎn)列

  在有些應(yīng)用場景中,如學(xué)生成績。學(xué)生所有科目的成績都保存到一張表里面,當(dāng)我們需要以列表的形式顯示出學(xué)生所對應(yīng)的每一科目的成績的時候,需要使用到行轉(zhuǎn)列。

  示例

1 -- 學(xué)生成績表 2 create table grade ( 3 id varchar2(64) not null, 4 name varchar2(20) not null, 5 course varchar2(100) not null, 6 score number(3) not null, 7 primary key (id) 8 ) 9 10 -- 初始化數(shù)據(jù)11 insert into grade values( '100001', '張三', '語文', 75);12 insert into grade values( '100002', '張三', '數(shù)學(xué)', 80);13 insert into grade values( '100003', '張三', '英語', 80);14 15 insert into grade values( '100004', '李四', '語文', 86);16 insert into grade values( '100005', '李四', '數(shù)學(xué)', 66);17 insert into grade values( '100006', '李四', '英語', 81);18 19 insert into grade values( '100007', '王五', '語文', 92);20 insert into grade values( '100008', '王五', '數(shù)學(xué)', 78);21 insert into grade values( '100009', '王五', '英語', 82);22 23 insert into grade values( '100010', '趙六', '語文', 80);24 insert into grade values( '100011', '趙六', '數(shù)學(xué)', 90);25 insert into grade values( '100012', '趙六', '英語', 77);26 27 insert into grade values( '100013', '李明', '語文', 69);28 insert into grade values( '100014', '李明', '數(shù)學(xué)', 75);29 insert into grade values( '100015', '李明', '英語', 80);

  行轉(zhuǎn)列語句

1 select2 t.name '姓名',3 sum(decode(t.course, '語文', t.score , 0)) '語文',4 sum(decode(t.course, '數(shù)學(xué)', t.score , 0)) '數(shù)學(xué)', 5 sum(decode(t.course, '英語', t.score , 0)) '英語'   6 from grade t 7 group by t.name

  因為這里使用到了 group by t.name,所以對于要展示score只能使用聚合函數(shù)(sum,max,min)都可以,如果不使用聚合函數(shù)就會報錯。

  執(zhí)行結(jié)果如下:

  

二、列轉(zhuǎn)行

  與行轉(zhuǎn)列相反,有些場景剛好需要這種操作。

  示例如下: 

1 --列轉(zhuǎn)行 2 create table sc_grade ( 3 id varchar2(64) not null, 4 name varchar2(20) not null, 5 cn_score number(3) not null, 6 math_score number(3) not null, 7 en_score number(3) not null, 8 primary key (id) 9 )10 11 --初始數(shù)據(jù)12 insert into sc_grade values ('10001', '張三', 75, 80, 80);13 insert into sc_grade values ('10002','王五', 92, 78, 82);14 insert into sc_grade values ('10003','趙六', 80, 90, 77);15 insert into sc_grade values ('10004','李四', 86, 66, 81);16 insert into sc_grade values ('10005','李明', 69, 75, 80);

   列傳行語句

1 select name '姓名' , '語文' course, cn_score as score from sc_grade2 union 3 select name '姓名' , '數(shù)學(xué)' course, math_score as score from sc_grade4 union 5 select name '姓名' , '英語' course, en_score as score from sc_grade6 order by '姓名' , course

  結(jié)果如下:

  

  也可以使用insert all .. into完成。使用insert all ..。 into 需要新建一個表用來保存轉(zhuǎn)換后的數(shù)據(jù)。

  表結(jié)構(gòu)如下:

1 -- 結(jié)果存放表2 create table test_sc_grade (  3 name varchar2(20) not null,   4 course varchar2(100) not null,   5 score number(3) not null 6 )

  執(zhí)行語句如下:

1 insert all 2 into test_sc_grade(name,course,score) values(name, '語文', cn_score) 3 into test_sc_grade(name,course,score) values(name, '數(shù)學(xué)', math_score) 4 into test_sc_grade(name,course,score) values(name, '英語', en_score) 5 select name, cn_score, math_score, en_score from sc_grade; 6 commit; 7 select * from test_sc_grade

  結(jié)果查詢與上面截圖一致。

點擊最下角閱讀全文查看Java開發(fā)之史上最全亂碼解決方案總結(jié)(Java程序員必看)

有人用微信聊天,有人卻在微信中學(xué)習(xí),成長。下面是2016最HOT IT公眾號,趕快試試新的關(guān)注方法吧

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多