oracle橫表怎么轉縱表

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視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享