首頁 > 資料庫 > Oracle > 主體

oracle橫錶怎麼轉縱表

WBOY
發布: 2022-05-24 15:23:06
原創
5918 人瀏覽過

在oracle中,可以利用pivot()函數將橫錶轉為縱表,該函數用於將行轉為列,語法為「SELECT * FROM (資料查詢集)PIVOT(SUM(行轉列後列的值)FOR 需要行轉列的列IN (轉換後列的值))」。

oracle橫錶怎麼轉縱表

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle橫表怎麼轉縱表

 Oracle行轉列就是把某一個欄位的值當作唯一值,然後另外一個欄位的行值轉換成它的列值。這裡依然利用我們系統的學生成績表作為例子,成績表記錄(行)當中對應著每一個科目的每一個學生的成績,那我們要做出一個報表是每個學生的所有科目作為一列展示出學生的成績資訊。案例資料如下:

oracle橫錶怎麼轉縱表

那我們要如何實作呢?以下就一一介紹幾種方法:

1、首先我們肯定想到的是利用Oracle分組(group by)應該可以實現,實作程式碼如下:

select c.stuname,
       --利用分组聚合函数
       sum(decode(b.coursename, '英语(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '数学(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '语文(2018上学期)', t.score, 0)) as "英语(2018上学期)"
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid
 group by c.stuname
登入後複製

我們利用group by對學生進行分組,然後利用decode對對應的課程的成績值進行轉換,然後再求和即可得到該門成績的結果值,結果如下:

oracle橫錶怎麼轉縱表

2 、Oracle11g之後提供了自帶函數PIVOT可以完美解決這個行轉列的需求,具體語法結構如下:

SELECT * FROM (数据查询集)
PIVOT 
(
 SUM(Score/*行转列后 列的值*/) FOR 
 coursename/*需要行转列的列*/ IN (转换后列的值)
)
登入後複製

    具體程式碼如下:

select * from  (select c.stuname,
       b.coursename,
       t.score
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid )  /*数据源*/
PIVOT 
(
 SUM(score/*行转列后 列的值*/) 
 FOR coursename/*需要行转列的列*/ IN ('英语(2018上学期)' as 英语,'数学(2018上学期)' as 数学,'语文(2018上学期)' as 语文 )
) ;
登入後複製

    結果如下:

oracle橫錶怎麼轉縱表

推薦教學:《Oracle影片教學

#

以上是oracle橫錶怎麼轉縱表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板