1.创建表:
create table test(id int,name varchar(20),quarter int,profile int))
insert into test values(1,'a',1,1000);
insert into test values(1,'a',2,1000);
insert into test values(1,'a',3,1000);
insert into test values(1,'a',4,1000);
insert into test values(2,'a',1,1000);
insert into test values(2,'a',2,1000);
insert into test values(2,'a',3,1000);
insert into test values(2,'a',4,1000);
2. Pivot 用法
select id,name,[1]as '1th Season',[2] as '2th Season',[3] as '3th Season',[4] as '4th Season'
from test
pivot
sum(profile)
for quarter in ([1],[2],[3],[4])
)as pvt
select * from test
3.Unpivot
select * from test2
select id,name,quarters,profiles
from test2
unpivot
profiles
for quarters in ([Q1],[Q2],[Q3],[Q4])
as unpvt
1.创建表:create table test(id int,name varchar(20),quarter int,profile int))insert into test values(1,'a',1,1000);insert into test values(1,'a',2,1000);insert into test values(1,'a',3,1000);insert into t...
文章目录方法一:
Oracle
行转列
pivot
函数方法二:使用MAX DECODE 实现
方法一:
Oracle
行转列
pivot
函数
语法:
pivot
(任一聚合函数 for 需要转列的值所在列名 in (需转为列名的值))
原数据格式如下:
SELECT
rspfd.FORECAST_YEAR , --年份
rspfd.INDEX_CODE , --指标代码
rspfd.INDEX_VALUE --指标值
FROM RPT_STK_PROFIT_FORECAST_DATA r
众所周知,静态
SQL
的输出结构必须也是静态的。对于经典的行转列问题,如果行数不定导致输出的列数不定,标准的答案就是使用动态
SQL
, 到11G里面则有XML结果的
PIVOT
。
但是
oracle
10G
没有
PIVOT
函数怎么办,自己写一个不久有了。上代码 直接点。
CREATE OR REPLACEtype
Pivot
Impl_shx as object( ret_type a...
遇到一个难题,需要将单列数据根据分列显示,需要用到
Pivot
语法。
参照现有的query,写了一段类似以下script片段的
sql
语句,问题搞定。经验总结:能用
SQL
搞定的问题,就不要人工去处理(效率低、易出错)。
SELECT *
FROM (
SELECT DISTINCT
ra.HDP_ID,
可以使用
pivot
_table函数的aggfunc参数来进行去重计数,具体代码如下:
df.
pivot
_table(index=['列1', '列2'], values='需要计数的列', aggfunc=pd.Series.nunique)
其中,index参数指定需要进行分组的列,values参数指定需要进行计数的列,aggfunc参数指定计数方式,pd.Series.nunique表示去重计数。