列转行pivot函数在SQL Sever里面和Oracle里面的用法区别
首先pivot是一个列转行的函数,反向用是unpivot(行转列)。
在SQL sever中可以这么写
SELECT * FROM [TABLE] /*数据源*/ AS A PIVOT ( MAX/*聚合函数*/(COL1/*行转列后 列的值*/) FOR A.COL2/*需要行转列的列*/ IN ([VALUE1],[VALUE2],[VALUE3].../*列的值*/) ) AS B
在Oracle中可以这么写
select *
from tab
pivot(max /*聚合函数*/
(col1 /*行转列后 列的值*/)
for a.col2 /*需要行转列的列*/
in('value1' as v1, 'value2' as v2, 'value3' as v3.. . /*列的值*/)
--==========================================================
先放一个sql sever的实例
以下是原表:
sql语句做处理:
select t.[1] as o, t.[2] p, t.[3] as q from tab_test1 as p PIVOT(max(p.b) FOR p.a IN([1], [2], [3])) AS T
结果如下:
--===========================================
再来一个Oracle的实例,以下是原表:
处理sql语句:
select * from TAB_TEST pivot(min(B) for A in('1' t1, '2' t2, '3' t3))
结果如下: