Oracle中pivot函數(shù)示例詳解
【基本介紹】
【格式】:pivot(聚合函數(shù) for 需要轉(zhuǎn)為列的字段名 in(需要轉(zhuǎn)為列的字段值))
【說明】:實(shí)現(xiàn)將指定字段的字段值轉(zhuǎn)換為列的效果。
【環(huán)境】:如下圖是樣例展示所使用的oracle版本。

【準(zhǔn)備樣例數(shù)據(jù)】
樣例數(shù)據(jù)如下圖所示:
NAME-學(xué)生姓名,SUBJECT-考試科目,GRADES-考試成績。

【樣例展示1】
實(shí)行如下sql語句:
select * from T_Student_Grades
pivot
(
sum(grades)
for name in('張三','李四','王五')
)返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的總成績,并將學(xué)生姓名字段行轉(zhuǎn)列顯示(此時(shí)雖然用到了聚合函數(shù)sum,由于SUBJECT字段也一并顯示,因此sum函數(shù)并沒有起到效果,顯示依舊是每一個(gè)學(xué)生的各科具體成績)。

【樣例展示2】
實(shí)行如下sql語句:
select * from T_Student_Grades
pivot
(
avg(grades)
for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五)
)返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的平均成績,并將學(xué)生姓名字段行轉(zhuǎn)列,顯示別名(此時(shí)雖然用到了聚合函數(shù)avg,由于SUBJECT字段也一并顯示,因此avg函數(shù)并沒有起到效果,顯示依舊是每一個(gè)學(xué)生的各科具體成績)。

【樣例展示3】
實(shí)行如下sql語句:
select * from (select name,grades from T_Student_Grades)
pivot
(
sum(grades)
for name in ('張三','李四','王五')
)返回結(jié)果如下:統(tǒng)計(jì)每一個(gè)學(xué)生的所有科目總成績,并將學(xué)生姓名字段行轉(zhuǎn)列(SUBJECT字段沒有顯示)。

【樣例展示4】
實(shí)行如下sql語句:
select * from T_Student_Grades
pivot
(
max(grades)
for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五)
)
where subject='數(shù)學(xué)'返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的最高成績,并將學(xué)生姓名字段行轉(zhuǎn)列,并且只顯示數(shù)學(xué)這一科目的成績(此時(shí)雖然用到了聚合函數(shù)max,由于SUBJECT字段也一并顯示,因此max函數(shù)并沒有起到效果,依舊是顯示每一個(gè)學(xué)生的各科具體成績)。

【樣例展示5】
實(shí)行如下sql語句:
select * from T_Student_Grades
pivot
(
min(grades)
for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五)
)
where 張三='90'返回結(jié)果如下:按指定科目統(tǒng)計(jì)所有學(xué)生的最低成績,并將學(xué)生姓名字段行轉(zhuǎn)列,并且只顯示數(shù)學(xué)這一科目的成績(此時(shí)雖然用到了聚合函數(shù)max,由于SUBJECT字段也一并顯示,因此max函數(shù)并沒有起到效果,依舊是顯示每一個(gè)學(xué)生的各科具體成績)。

【樣例展示6】
實(shí)行如下sql語句(in中使用子查詢):
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á)式,如下圖所示,看來in不支持子查詢。

到此這篇關(guān)于Oracle中pivot函數(shù)詳解的文章就介紹到這了,更多相關(guān)Oracle pivot函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle實(shí)現(xiàn)某表隨機(jī)抽取數(shù)據(jù)(隨機(jī)性抽取)
這篇文章主要介紹了Oracle實(shí)現(xiàn)某表隨機(jī)抽取數(shù)據(jù)(隨機(jī)性抽取),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
ORACLE應(yīng)用經(jīng)驗(yàn)(1)
ORACLE應(yīng)用經(jīng)驗(yàn)(1)...2007-03-03
深入Oracle的left join中on和where的區(qū)別詳解
本篇文章是對(duì)Oracle的left join中on和where的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Oracle實(shí)現(xiàn)同表更新或插入的三種方案
這篇文章主要給大家介紹了Oracle實(shí)現(xiàn)同表更新或插入的三種方案,文章通過代碼示例和圖文結(jié)合講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11

