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后值的列名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值