ORACLE行列转换
1. pivot函数:行转列函数
说明:pivot(聚合函数 for 转换列的值所在列名 in (转为列名的值));
2 .unpivot函数:列转行函数
说明:unpivot(新增列对应值的列名 for 新增列转为行后所在 列的列名 in(需转为行的列名));
1.oracle的pivot函数
行转列函数,转换前
执行如下语句:
sql
with temp as
(select '英语' 科目, '小毛' 学生, '第一' 排名
from dual
union all
select '英语' 科目, '小红' 学生, '第二' 排名
from dual
union all
select '英语' 科目, '小明' 学生, '第三' 排名
from dual
union all
select '生物' 科目, '小志' 学生, '第四' 排名
from dual
union all
select '生物' 科目, '小李子' 学生, '第一' 排名
from dual
union all
select '生物' 科目, '小花花' 学生, '第二' 排名
from dual
union all
select '生物' 科目, '小芝麻' 学生, '第三' 排名
from dual)
select *
from (select 科目, 学生, 排名
from temp)pivot(max(学生) for 排名 in ('第一' as 第一,
'第二' AS 第二,
'第三' AS 第三,
'第四' AS 第四));
执行完成后
2.oracle的unpivot函数
列转行函数,转换前
执行如下语句:
with temp as
(select '英语' 科目, '小毛' 第一, '小志' 第二, '小红' 第三, '小明' 第四
from dual
union all
select '生物' 科目,
'小李子' 第一,
'小红' 第二,
'小芝麻' 第三,
'小花花' 第四
from dual)
select 科目, 学生, 排名
from temp unpivot(学生 for 排名 in(第一, 第二, 第三, 第四)) t
执行完成后