Oracle如何利用SQL实现报表的同比环比功能?

tingloveyaoyao 2012-09-13 08:42:26
Oracle如何利用SQL实现报表的同比环比功能?
无论用存储过程或者视图都可以,只要能实现同比和环比的功能就可以了
求大神指点,由于本人新学,所以希望讲解尽可能的详细一点
先谢啦
...全文
243 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhq8922 2012-09-16
  • 打赏
  • 举报
回复
看数据库是怎么样设计的吧,我刚实现了这个功能,是用存储过程写的,百分比都能写出来的
fw0124 2012-09-13
  • 打赏
  • 举报
回复
参考这个http://blog.chinaunix.net/uid-15457221-id-2853871.html
人生无悔 2012-09-13
  • 打赏
  • 举报
回复

--按月同比
with t(td,tv) as(
select to_date('2011/09/03','yyyy/mm/dd'),30 from dual
union all select to_date('2012/08/03','yyyy/mm/dd'),10 from dual
union all select to_date('2012/08/02','yyyy/mm/dd'),40 from dual
union all select to_date('2012/09/04','yyyy/mm/dd'),30 from dual
union all select to_date('2012/09/05','yyyy/mm/dd'),25 from dual
)
select (sum(case when to_char(td,'yyyymm')=to_char(sysdate,'yyyymm') then tv else 0 end)
-sum(case when to_char(td,'yyyymm')=to_char(sysdate,'yyyymm')-100 then tv else 0 end))
/sum(case when to_char(td,'yyyymm')=to_char(sysdate,'yyyymm')-100 then tv else 0 end)*100
||'%'
from t;
--按月环比
with t(td,tv) as(
select to_date('2011/09/03','yyyy/mm/dd'),30 from dual
union all select to_date('2012/08/03','yyyy/mm/dd'),10 from dual
union all select to_date('2012/08/02','yyyy/mm/dd'),40 from dual
union all select to_date('2012/09/04','yyyy/mm/dd'),30 from dual
union all select to_date('2012/09/05','yyyy/mm/dd'),25 from dual
)
select (sum(case when to_char(td,'yyyymm')=to_char(sysdate,'yyyymm') then tv else 0 end)
-sum(case when to_char(td,'yyyymm')=to_char(add_months(sysdate,-1),'yyyymm') then tv else 0 end))
/sum(case when to_char(td,'yyyymm')=to_char(add_months(sysdate,-1),'yyyymm') then tv else 0 end)*100
||'%'
from t;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧