Oracle中pivot函數(shù)圖文實例詳解
目錄
- 【基本介紹】
- 【準(zhǔn)備樣例數(shù)據(jù)】
- 【樣例展示1】
- 【樣例展示2】
- 【樣例展示3】
- 【樣例展示4】
- 【樣例展示5】
- 【樣例展示6】
- 總結(jié)
【基本介紹】
【格式】:pivot(聚合函數(shù) for 需要轉(zhuǎn)為列的字段名 in(需要轉(zhuǎn)為列的字段值))
【說明】:實現(xiàn)將指定字段的字段值轉(zhuǎn)換為列的效果。
【環(huán)境】:如下圖是樣例展示所使用的oracle版本。
【準(zhǔn)備樣例數(shù)據(jù)】
樣例數(shù)據(jù)如下圖所示:
NAME-學(xué)生姓名,SUBJECT-考試科目,GRADES-考試成績。
【樣例展示1】
實行如下sql語句:
select * from T_Student_Gradespivot(sum(grades)for name in("張三","李四","王五"))
返回結(jié)果如下:按指定科目統(tǒng)計所有學(xué)生的總成績,并將學(xué)生姓名字段行轉(zhuǎn)列顯示(此時雖然用到了聚合函數(shù)sum,由于SUBJECT字段也一并顯示,因此sum函數(shù)并沒有起到效果,顯示依舊是每一個學(xué)生的各科具體成績)。
【樣例展示2】
實行如下sql語句:
select * from T_Student_Gradespivot(avg(grades)for name in ("張三" as 張三,"李四" as 李四,"王五" as 王五))
返回結(jié)果如下:按指定科目統(tǒng)計所有學(xué)生的平均成績,并將學(xué)生姓名字段行轉(zhuǎn)列,顯示別名(此時雖然用到了聚合函數(shù)avg,由于SUBJECT字段也一并顯示,因此avg函數(shù)并沒有起到效果,顯示依舊是每一個學(xué)生的各科具體成績)。
【樣例展示3】
實行如下sql語句:
select * from (select name,grades from T_Student_Grades)pivot(sum(grades)for name in ("張三","李四","王五"))
返回結(jié)果如下:統(tǒng)計每一個學(xué)生的所有科目總成績,并將學(xué)生姓名字段行轉(zhuǎn)列(SUBJECT字段沒有顯示)。
【樣例展示4】
實行如下sql語句:
select * from T_Student_Gradespivot(max(grades)for name in ("張三" as 張三,"李四" as 李四,"王五" as 王五))where subject="數(shù)學(xué)"
返回結(jié)果如下:按指定科目統(tǒng)計所有學(xué)生的最高成績,并將學(xué)生姓名字段行轉(zhuǎn)列,并且只顯示數(shù)學(xué)這一科目的成績(此時雖然用到了聚合函數(shù)max,由于SUBJECT字段也一并顯示,因此max函數(shù)并沒有起到效果,依舊是顯示每一個學(xué)生的各科具體成績)。
【樣例展示5】
實行如下sql語句:
?select * from T_Student_Gradespivot(min(grades)for name in ("張三" as 張三,"李四" as 李四,"王五" as 王五))where 張三="90"
返回結(jié)果如下:按指定科目統(tǒng)計所有學(xué)生的最低成績,并將學(xué)生姓名字段行轉(zhuǎn)列,并且只顯示數(shù)學(xué)這一科目的成績(此時雖然用到了聚合函數(shù)max,由于SUBJECT字段也一并顯示,因此max函數(shù)并沒有起到效果,依舊是顯示每一個學(xué)生的各科具體成績)。
【樣例展示6】
實行如下sql語句(in中使用子查詢):
select * from T_Student_Gradespivot(count(grades)for name in (select distinct name from T_Student_Grades))
報錯提示:ORA-00936:確實表達(dá)式,如下圖所示,看來in不支持子查詢。
總結(jié)
到此這篇關(guān)于Oracle中pivot函數(shù)詳解的文章就介紹到這了,更多相關(guān)Oracle pivot函數(shù)詳解內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
