使用case when高级用法对数据库进行行列转化 分组、聚合函数使用

看下原来代码:

使用case when高级用法对数据库进行行列转化 分组、聚合函数使用_第1张图片


将kpi_name这一列进行在一行显示

使用case when高级用法对数据库进行行列转化 分组、聚合函数使用_第2张图片


一、不用分组、聚合函数

--测试不用聚合分组函数

select 
kpi_date,
tyt_name,
 (case when kpi_name='换卡' then kpi_value end ) G4指标,
 (case when kpi_name='换卡' then num_value  end ) G4完成数,
( (case when kpi_name='换卡' then num_value end )/ (case when kpi_name='换卡' then kpi_value  end )) G4完成率,

 (case when kpi_name='流量包新增' then kpi_value end ) 流量包新增指标,
 (case when kpi_name='流量包新增' then num_value  end ) 流量包新增完成数,
( (case when kpi_name='流量包新增' then num_value end )/ (case when kpi_name='流量包新增' then kpi_value  end ))  流量包新增完成率,

 (case when kpi_name='飞享迁移' then kpi_value end ) 飞享迁移指标,
 (case when kpi_name='飞享迁移' then num_value  end ) 飞享迁移完成数,
( (case when kpi_name='飞享迁移' then num_value end )/ (case when kpi_name='飞享迁移' then kpi_value  end )) 飞享迁移完成率,

 (case when kpi_name='流量包提档' then kpi_value end ) 流量包提档指标,
 (case when kpi_name='流量包提档' then num_value  end )  流量包提档完成数,
( (case when kpi_name='流量包提档' then num_value end )/ (case when kpi_name='流量包提档' then kpi_value  end )) 流量包提档完成率,

 (case when kpi_name='宽带' then kpi_value end ) 宽带指标,
 (case when kpi_name='宽带' then num_value  end ) 宽带完成数,
 (case when kpi_name='宽带电视' then kpi_value end ) 宽带电视指标,
 (case when kpi_name='宽带电视' then num_value  end ) 宽带电视完成数,
 (case when kpi_name='宽带含电视' then kpi_value end ) 宽带含电视指标,
 (case when kpi_name='宽带含电视' then num_value  end ) 宽带含电视完成数,
( (case when kpi_name='宽带含电视' then num_value end )/ (case when kpi_name='宽带含电视' then kpi_value  end )) 宽带含电视完成率,

 (case when kpi_name='手厅' then kpi_value end ) 手厅指标,
 (case when kpi_name='手厅' then num_value  end ) 手厅完成数,
( (case when kpi_name='手厅' then num_value end )/ (case when kpi_name='手厅' then kpi_value  end )) 手厅完成率
from sbf_rpt_yy_daily@sxyw
where tyt_name is not null and type='1' AND kpi_date='20150920'
order by kpi_date desc,decode(tyt_name,'合计','终合计',tyt_name);

最终结果:

使用case when高级用法对数据库进行行列转化 分组、聚合函数使用_第3张图片


显然,因为使用了case when 语句,所以,造成了不同数据显示在不同行的情况的出现。

所以,需要将不同行的数据合并到一行去,就需要聚合函数(分组函数必须和聚合函数同时使用)


二、使用分组,聚合函数


--now hjy
select 
kpi_date,
tyt_name,
sum(case when kpi_name='换卡' then kpi_value end ) G4指标,
sum(case when kpi_name='换卡' then num_value  end ) G4完成数,
(sum(case when kpi_name='换卡' then num_value end )/sum(case when kpi_name='换卡' then kpi_value  end )) G4完成率,

sum(case when kpi_name='流量包新增' then kpi_value end ) 流量包新增指标,
sum(case when kpi_name='流量包新增' then num_value  end ) 流量包新增完成数,
(sum(case when kpi_name='流量包新增' then num_value end )/sum(case when kpi_name='流量包新增' then kpi_value  end ))  流量包新增完成率,

sum(case when kpi_name='飞享迁移' then kpi_value end ) 飞享迁移指标,
sum(case when kpi_name='飞享迁移' then num_value  end ) 飞享迁移完成数,
(sum(case when kpi_name='飞享迁移' then num_value end )/sum(case when kpi_name='飞享迁移' then kpi_value  end )) 飞享迁移完成率,

sum(case when kpi_name='流量包提档' then kpi_value end ) 流量包提档指标,
sum(case when kpi_name='流量包提档' then num_value  end )  流量包提档完成数,
(sum(case when kpi_name='流量包提档' then num_value end )/sum(case when kpi_name='流量包提档' then kpi_value  end )) 流量包提档完成率,

sum(case when kpi_name='宽带' then kpi_value end ) 宽带指标,
sum(case when kpi_name='宽带' then num_value  end ) 宽带完成数,
sum(case when kpi_name='宽带电视' then kpi_value end ) 宽带电视指标,
sum(case when kpi_name='宽带电视' then num_value  end ) 宽带电视完成数,
sum(case when kpi_name='宽带含电视' then kpi_value end ) 宽带含电视指标,
sum(case when kpi_name='宽带含电视' then num_value  end ) 宽带含电视完成数,
(sum(case when kpi_name='宽带含电视' then num_value end )/sum(case when kpi_name='宽带含电视' then kpi_value  end )) 宽带含电视完成率,

sum(case when kpi_name='手厅' then kpi_value end ) 手厅指标,
sum(case when kpi_name='手厅' then num_value  end ) 手厅完成数,
(sum(case when kpi_name='手厅' then num_value end )/sum(case when kpi_name='手厅' then kpi_value  end )) 手厅完成率
from sbf_rpt_yy_daily@sxyw
where tyt_name is not null and type='1'
group by kpi_date,tyt_name
order by kpi_date desc,decode(tyt_name,'合计','终合计',tyt_name);

使用case when高级用法对数据库进行行列转化 分组、聚合函数使用_第4张图片



你可能感兴趣的:(数据库)