Oracle 行列轉換函式pivot使用

2021-10-10 05:04:32 字數 2405 閱讀 7401

描述:在專案中,需要將表中日期資料行,用檢視轉列顯示月報表

注意:多聚合必須重新命名。

主鍵 varchar2(50)

default sys_guid(

)not

null

,日期 varchar2(10)

,學生姓名 varchar2(20)

,學生分組 varchar2(10)

,學號 varchar2(10)

)insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'01'

,'張三'

,'一組'

,'001');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'01'

,'李四'

,'一組'

,'002');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'01'

,'王五'

,'二組'

,'003');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'01'

,'趙六'

,'二組'

,'004');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'02'

,'狗蛋'

,'一組'

,'005');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'02'

,'狗剩'

,'一組'

,'006');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'02'

,'狗狗'

,'二組'

,'007');

insert

into pivottest (主鍵,日期,學生姓名,學生分組,學號)

values

(sys_guid(),

'02'

,'狗三'

,'二組'

(學生姓名)

as 姓名,

max(學號)

as 學號 for 日期 in

('01'

as 一班,

'02'

as 二班)

)order

by 學生分組

按日期值穿透,姓名、學號聚合之後,不能存在影響聚合的【主鍵】字段存在,否則會存在無法合併行的情況

通過處理原表,去掉主鍵的查詢,即可實現。(詳細參見參考裡第一篇文章,這裡主要還是自己去理解,哪些列能要,哪些不能要)

select

*from

(select 日期,

學生姓名,

學生分組,

學號 from pivottest)

pivot

(max

(學生姓名)

as 姓名,

max(學號)

as 學號 for 日期 in

('01'

as 一班,

'02'

as 二班)

)order

by 學生分組

Oracle行列轉換

1.列轉行 create table t col row id int,c1 varchar2 10 c2 varchar2 10 c3 varchar2 10 insert into t col row values 1,v11 v21 v31 insert into t col row valu...

Oracle行列轉換

行轉列 select count over cnt,rn,str from select rownum rn,substr a.str,instr a.str,1,a.n 1,instr a.str,1,a.n 1 instr a.str,1,a.n 1 str from select a,b,c,...

oracle 行列轉換

q 如何實現行列轉換 a 1 固定列數的行列轉換 如student subject grade student1 語文 80 student1 數學 70 student1 英語 60 student2 語文 90 student2 數學 80 student2 英語 100 轉換為 語文 數學 英...