Oracle中pivot函數(shù)圖文實(shí)例詳解
【基本介紹】
【格式】:pivot(聚合函數(shù) for 需要轉(zhuǎn)為列的字段名 in(需要轉(zhuǎn)為列的字段值))
【說(shuō)明】:實(shí)現(xiàn)將指定字段的字段值轉(zhuǎn)換為列的效果。
【環(huán)境】:如下圖是樣例展示所使用的oracle版本。
【準(zhǔn)備樣例數(shù)據(jù)】
樣例數(shù)據(jù)如下圖所示:
NAME-學(xué)生姓名,SUBJECT-考試科目,GRADES-考試成績(jī)。
【樣例展示1】
實(shí)行如下sql語(yǔ)句:
select * from T_Student_Grades pivot ( sum(grades) for name in('張三','李四','王五') )
返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的總成績(jī),并將學(xué)生姓名字段行轉(zhuǎn)列顯示(此時(shí)雖然用到了聚合函數(shù)sum,由于SUBJECT字段也一并顯示,因此sum函數(shù)并沒(méi)有起到效果,顯示依舊是每一個(gè)學(xué)生的各科具體成績(jī))。
【樣例展示2】
實(shí)行如下sql語(yǔ)句:
select * from T_Student_Grades pivot ( avg(grades) for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五) )
返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的平均成績(jī),并將學(xué)生姓名字段行轉(zhuǎn)列,顯示別名(此時(shí)雖然用到了聚合函數(shù)avg,由于SUBJECT字段也一并顯示,因此avg函數(shù)并沒(méi)有起到效果,顯示依舊是每一個(gè)學(xué)生的各科具體成績(jī))。
【樣例展示3】
實(shí)行如下sql語(yǔ)句:
select * from (select name,grades from T_Student_Grades) pivot ( sum(grades) for name in ('張三','李四','王五') )
返回結(jié)果如下:統(tǒng)計(jì)每一個(gè)學(xué)生的所有科目總成績(jī),并將學(xué)生姓名字段行轉(zhuǎn)列(SUBJECT字段沒(méi)有顯示)。
【樣例展示4】
實(shí)行如下sql語(yǔ)句:
select * from T_Student_Grades pivot ( max(grades) for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五) ) where subject='數(shù)學(xué)'
返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的最高成績(jī),并將學(xué)生姓名字段行轉(zhuǎn)列,并且只顯示數(shù)學(xué)這一科目的成績(jī)(此時(shí)雖然用到了聚合函數(shù)max,由于SUBJECT字段也一并顯示,因此max函數(shù)并沒(méi)有起到效果,依舊是顯示每一個(gè)學(xué)生的各科具體成績(jī))。
【樣例展示5】
實(shí)行如下sql語(yǔ)句:
?select * from T_Student_Grades pivot ( min(grades) for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五) ) where 張三='90'
返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的最低成績(jī),并將學(xué)生姓名字段行轉(zhuǎn)列,并且只顯示數(shù)學(xué)這一科目的成績(jī)(此時(shí)雖然用到了聚合函數(shù)max,由于SUBJECT字段也一并顯示,因此max函數(shù)并沒(méi)有起到效果,依舊是顯示每一個(gè)學(xué)生的各科具體成績(jī))。
【樣例展示6】
實(shí)行如下sql語(yǔ)句(in中使用子查詢(xún)):
select * from T_Student_Grades pivot ( count(grades) for name in (select distinct name from T_Student_Grades) )
報(bào)錯(cuò)提示:ORA-00936:確實(shí)表達(dá)式,如下圖所示,看來(lái)in不支持子查詢(xún)。
總結(jié)
到此這篇關(guān)于Oracle中pivot函數(shù)詳解的文章就介紹到這了,更多相關(guān)Oracle pivot函數(shù)詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle SqlPlus設(shè)置Login.sql的技巧
sqlplus在啟動(dòng)時(shí)會(huì)自動(dòng)運(yùn)行兩個(gè)腳本:glogin.sql、login.sql這兩個(gè)文件,接下來(lái)通過(guò)本文給大家介紹Oracle SqlPlus設(shè)置Login.sql的技巧,對(duì)oracle sqlplus設(shè)置相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01給Oracle添加split和splitstr函數(shù)的方法
最近項(xiàng)目中有很多需要做批量操作的需求,客戶(hù)端把一組逗號(hào)分隔的ID字符串傳給數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程就需要把它們分割,然后逐個(gè)處理2012-11-11使用PLSQL遠(yuǎn)程連接Oracle數(shù)據(jù)庫(kù)的方法(內(nèi)網(wǎng)穿透)
Oracle數(shù)據(jù)庫(kù)來(lái)源于知名大廠甲骨文公司,是一款通用數(shù)據(jù)庫(kù)系統(tǒng),能提供完整的數(shù)據(jù)管理功能,而Oracle數(shù)據(jù)庫(kù)時(shí)關(guān)系數(shù)據(jù)庫(kù)的典型代表,其數(shù)據(jù)關(guān)系設(shè)計(jì)完備,這篇文章主要介紹了使用PLSQL遠(yuǎn)程連接Oracle數(shù)據(jù)庫(kù)的方法(內(nèi)網(wǎng)穿透),需要的朋友可以參考下2023-03-03基于ora2pg遷移Oracle19C到postgreSQL14的全過(guò)程
ora2pg是一個(gè)開(kāi)源工具,可將Oracle數(shù)據(jù)庫(kù)模式轉(zhuǎn)換為PostgreSQL格式,支持導(dǎo)出數(shù)據(jù)庫(kù)絕大多數(shù)對(duì)象類(lèi)型,本文就給大家介紹了基于ora2pg遷移Oracle19C到postgreSQL14的全過(guò)程,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11Oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán)
本篇文章給大家介紹oracle顯示游標(biāo)的使用及游標(biāo)for循環(huán),當(dāng)查詢(xún)返回單行記錄時(shí)使用隱式游標(biāo),查詢(xún)返回多行記錄并逐行進(jìn)行處理時(shí)使用顯式游標(biāo),對(duì)本文感興趣的朋友一起學(xué)習(xí)吧2015-11-11深刻理解Oracle數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉
深刻理解Oracle數(shù)據(jù)庫(kù)的啟動(dòng)和關(guān)閉...2007-03-03數(shù)據(jù)庫(kù)查詢(xún)排序使用隨機(jī)排序結(jié)果示例(Oracle/MySQL/MS SQL Server)
數(shù)據(jù)庫(kù)查詢(xún)排序使用隨機(jī)排序結(jié)果示例,這里提供了Oracle/MySQL/MS SQL Server三種數(shù)據(jù)庫(kù)的示例2013-12-12oracle基本查詢(xún)操作子查詢(xún)用法實(shí)例分析
這篇文章主要介紹了oracle基本查詢(xún)操作子查詢(xún)用法,結(jié)合實(shí)例形式分析了oracle數(shù)據(jù)庫(kù)子查詢(xún)相關(guān)概念、原理、語(yǔ)法、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02