您的位置:首頁技術文章
文章詳情頁

Oracle中pivot函數圖文實例詳解

瀏覽:125日期:2023-05-30 16:13:46
目錄
  • 【基本介紹】
  • 【準備樣例數據】
  • 【樣例展示1】
  • 【樣例展示2】
  • 【樣例展示3】
  • 【樣例展示4】
  • 【樣例展示5】
  • 【樣例展示6】
  • 總結

【基本介紹】

【格式】:pivot(聚合函數 for 需要轉為列的字段名 in(需要轉為列的字段值))

【說明】:實現將指定字段的字段值轉換為列的效果。

【環境】:如下圖是樣例展示所使用的oracle版本。

【準備樣例數據】

樣例數據如下圖所示:

NAME-學生姓名,SUBJECT-考試科目,GRADES-考試成績。

【樣例展示1】

實行如下sql語句:

select * from T_Student_Gradespivot(sum(grades)for name in("張三","李四","王五"))

返回結果如下:按指定科目統計所有學生的總成績,并將學生姓名字段行轉列顯示(此時雖然用到了聚合函數sum,由于SUBJECT字段也一并顯示,因此sum函數并沒有起到效果,顯示依舊是每一個學生的各科具體成績)。

【樣例展示2】

實行如下sql語句:

select * from T_Student_Gradespivot(avg(grades)for name in ("張三" as 張三,"李四" as 李四,"王五" as 王五))

返回結果如下:按指定科目統計所有學生的平均成績,并將學生姓名字段行轉列,顯示別名(此時雖然用到了聚合函數avg,由于SUBJECT字段也一并顯示,因此avg函數并沒有起到效果,顯示依舊是每一個學生的各科具體成績)。

【樣例展示3】

實行如下sql語句:

select * from (select name,grades from T_Student_Grades)pivot(sum(grades)for name in ("張三","李四","王五"))

返回結果如下:統計每一個學生的所有科目總成績,并將學生姓名字段行轉列(SUBJECT字段沒有顯示)。

【樣例展示4】

實行如下sql語句:

select * from T_Student_Gradespivot(max(grades)for name in ("張三" as 張三,"李四" as 李四,"王五" as 王五))where subject="數學"

返回結果如下:按指定科目統計所有學生的最高成績,并將學生姓名字段行轉列,并且只顯示數學這一科目的成績(此時雖然用到了聚合函數max,由于SUBJECT字段也一并顯示,因此max函數并沒有起到效果,依舊是顯示每一個學生的各科具體成績)。

【樣例展示5】

實行如下sql語句:

?select * from T_Student_Gradespivot(min(grades)for name in ("張三" as 張三,"李四" as 李四,"王五" as 王五))where 張三="90"

返回結果如下:按指定科目統計所有學生的最低成績,并將學生姓名字段行轉列,并且只顯示數學這一科目的成績(此時雖然用到了聚合函數max,由于SUBJECT字段也一并顯示,因此max函數并沒有起到效果,依舊是顯示每一個學生的各科具體成績)。

【樣例展示6】

實行如下sql語句(in中使用子查詢):

select * from T_Student_Gradespivot(count(grades)for name in (select distinct name from T_Student_Grades))

報錯提示:ORA-00936:確實表達式,如下圖所示,看來in不支持子查詢。

總結

到此這篇關于Oracle中pivot函數詳解的文章就介紹到這了,更多相關Oracle pivot函數詳解內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Oracle
国产综合久久一区二区三区