本文主要是介绍oracle pivot,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
语法:
Select * From 表名-- 这个表应该是下面聚合之后的表,而不是原理的行表
PIVOT
(
SUM('要合并的列1'),MAX('要合并的列2'),.... --操作的列
FOR
将值转换成列的列名 IN
(列值1,列值2,列值3,列值4....)
)
示例:
with t as (
Select '桃子' name, 300 nums ,1 jidu from dual
Union
Select '苹果' name, 200 nums ,1 jidu from dual
Union
Select '西瓜' name, 100 nums ,1 jidu from dual
Union
Select '桃子' name, 111 nums ,2 jidu from dual
Union
Select '西瓜' name, 222 nums ,2 jidu from dual
Union
Select '苹果' name, 333 nums ,2 jidu from dual
)
--select * from t pivot(sum(nums) for name in ('桃子','西瓜','苹果')) order by jidu; --这样只能全部显示出来,不能达到聚合的目的
select * from (select name, nums from t) pivot (max(nums) for name in ('桃子','西瓜','苹果'));
结果:
例子是从别人那里找到的,但是并不能达到目的。后来又研究了一下。
列转行:
with x as {
select 1 id ,'苹果' name ,1000 p1,2000 p2 ,3300 p3 ,5000 p4 from dual
union
select 2 id ,'橘子' name ,1000 p1,2000 p2 ,3300 p3 ,5000 p4 from dual
union
select 3 id ,'香蕉' name ,1000 p1,2000 p2 ,3300 p3 ,5000 p4 from dual
union
select 4 id ,'葡萄' name ,1000 p1,2000 p2 ,3300 p3 ,5000 p4 from dual
}
select id , name, jidu, num from x unpivot (xiaoshou for num in (q1, q2, q3, q4) )。
没有找到语法,估计是
select id(已经存在的),name(已经存在的),jidu(新加的列名,和后面的for有关,in内值的标题成为值), num (新加的列名, in后值的列名)
这篇关于oracle pivot的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!