首先 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))
结果如下:
来源: http://www.bubuko.com/infodetail-2961175.html