oracle中pivot函數圖文實例詳解
【基本介紹】
【格式】:pivot(聚合函數 for 需要轉為列的字段名 in(需要轉為列的字段值))
【說明】:實現將指定字段的字段值轉換為列的效果。
【環境】:如下圖是樣例展示所使用的oracle版本。
【準備樣例數據】
樣例數據如下圖所示:
name-學生姓名,subject-考試科目,grades-考試成績。
【樣例展示1】
實行如下sql語句:
select * from t_student_grades pivot ( sum(grades) for name in('張三','李四','王五') )
返回結果如下:按指定科目統計所有學生的總成績,并將學生姓名字段行轉列顯示(此時雖然用到了聚合函數sum,由于subject字段也一并顯示,因此sum函數并沒有起到效果,顯示依舊是每一個學生的各科具體成績)。
【樣例展示2】
實行如下sql語句:
select * from t_student_grades pivot ( 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_grades pivot ( max(grades) for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五) ) where subject='數學'
返回結果如下:按指定科目統計所有學生的最高成績,并將學生姓名字段行轉列,并且只顯示數學這一科目的成績(此時雖然用到了聚合函數max,由于subject字段也一并顯示,因此max函數并沒有起到效果,依舊是顯示每一個學生的各科具體成績)。
【樣例展示5】
實行如下sql語句:
?select * from t_student_grades pivot ( min(grades) for name in ('張三' as 張三,'李四' as 李四,'王五' as 王五) ) where 張三='90'
返回結果如下:按指定科目統計所有學生的最低成績,并將學生姓名字段行轉列,并且只顯示數學這一科目的成績(此時雖然用到了聚合函數max,由于subject字段也一并顯示,因此max函數并沒有起到效果,依舊是顯示每一個學生的各科具體成績)。
【樣例展示6】
實行如下sql語句(in中使用子查詢):
select * from t_student_grades pivot ( count(grades) for name in (select distinct name from t_student_grades) )
報錯提示:ora-00936:確實表達式,如下圖所示,看來in不支持子查詢。
總結
關于oracle中pivot函數詳解的文章就介紹至此,更多相關oracle pivot函數詳解內容請搜索碩編程以前的文章,希望以后支持碩編程!