首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

Oracle开发课题之:报表函数(转载)

2013-07-01 
Oracle开发专题之:报表函数(转载)目录1.报表函数简介2.RATIO_T

Oracle开发专题之:报表函数(转载)

目录
=========================================

1.报表函数简介
2.RATIO_TO_REPORT函数

一、报表函数简介:

回顾一下前面《Oracle开发专题之:窗口函数》中关于全统计一节,我们使用了Oracle提供的:

Oracle开发课题之:报表函数(转载)sum(sum(tot_sales))?over?(order?by?month?rows?between?unbounded?preceding?and?unbounded?following)


来统计全年的订单总额,这个函数会在记录集形成的过程中,每检索一条记录就执行一次,它总共执行了12次。这是非常费时的。实际上我们还有更简便的方法:

Oracle开发课题之:报表函数(转载)SQL>?select?month,
Oracle开发课题之:报表函数(转载)??2?????????sum(tot_sales)?month_sales,
Oracle开发课题之:报表函数(转载)??3?????????sum(sum(tot_sales))?over(order?by?month
Oracle开发课题之:报表函数(转载)??4?????????rows?between?unbounded?preceding?and?unbounded?following)?win_sales,
Oracle开发课题之:报表函数(转载)??5?????????sum(sum(tot_sales))?over()?rpt_sales
Oracle开发课题之:报表函数(转载)??6????from?orders
Oracle开发课题之:报表函数(转载)??7???group?by?month;
Oracle开发课题之:报表函数(转载)
Oracle开发课题之:报表函数(转载)?????MONTH?MONTH_SALES?WINDOW_SALES?REPORT_SALES
Oracle开发课题之:报表函数(转载)----------?-----------?------------?------------
Oracle开发课题之:报表函数(转载)?????????1??????610697??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????2??????428676??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????3??????637031??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????4??????541146??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????5??????592935??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????6??????501485??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????7??????606914??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????8??????460520??????6307766??????6307766
Oracle开发课题之:报表函数(转载)?????????9??????392898??????6307766??????6307766
Oracle开发课题之:报表函数(转载)????????10??????510117??????6307766??????6307766
Oracle开发课题之:报表函数(转载)????????11??????532889??????6307766??????6307766
Oracle开发课题之:报表函数(转载)????????12??????492458??????6307766??????6307766
Oracle开发课题之:报表函数(转载)
Oracle开发课题之:报表函数(转载)已选择12行。


over函数的空括号表示该记录集的所有记录都应该被列入统计的范围,如果使用了partition by则先分区,再依次统计各个分区。

二、RATIO_TO_REPORT函数:

报表函数(窗口函数)特别适合于报表中需要同时显示详细数据和统计数据的情况。例如在销售报告中经常会出现这样的需求:列出上一年度每个月的销售总额、年底销售额以及每个月的销售额占全年总销售额的比例:

方法①:

Oracle开发课题之:报表函数(转载)select?all_sales.*,
Oracle开发课题之:报表函数(转载)???????????100?*?round(cust_sales?/?region_sales,?2)?||?'%'?Percent
Oracle开发课题之:报表函数(转载)?from?(select?o.cust_nbr?customer,
Oracle开发课题之:报表函数(转载)????????????????????????o.region_id?region,
Oracle开发课题之:报表函数(转载)???????????????????????sum(o.tot_sales)?cust_sales,
Oracle开发课题之:报表函数(转载)???????????????????????sum(sum(o.tot_sales))?over(partition?by?o.region_id)?region_sales
Oracle开发课题之:报表函数(转载)???????????????from?orders_tmp?o
Oracle开发课题之:报表函数(转载)????????????where?o.year?=?2001
Oracle开发课题之:报表函数(转载)?????????????group?by?o.region_id,?o.cust_nbr)?all_sales
Oracle开发课题之:报表函数(转载)?where?all_sales.cust_sales?>?all_sales.region_sales?*?0.2;


这是一种笨方法也是最易懂的方法。

方法②:

Oracle开发课题之:报表函数(转载)select?region_id,?salesperson_id,?
Oracle开发课题之:报表函数(转载)???????????sum(tot_sales)?sp_sales,
Oracle开发课题之:报表函数(转载)???????????round(sum(tot_sales)?/?sum(sum(tot_sales))?
???????????????????? ?over?(partition?by?region_id),?2)?percent_of_region
Oracle开发课题之:报表函数(转载)??from?orders
Oracle开发课题之:报表函数(转载)where?year?=?2001
Oracle开发课题之:报表函数(转载)?group?by?region_id,?salesperson_id
Oracle开发课题之:报表函数(转载)?order?by?region_id,?salesperson_id;


方法③

Oracle开发课题之:报表函数(转载)select?region_id,?salesperson_id,?
Oracle开发课题之:报表函数(转载)????????????sum(tot_sales)?sp_sales,
Oracle开发课题之:报表函数(转载)????????????round(ratio_to_report(sum(tot_sales))?
Oracle开发课题之:报表函数(转载)??????????????????????????over?(partition?by?region_id),?2)?sp_ratio
Oracle开发课题之:报表函数(转载)???from?orders
Oracle开发课题之:报表函数(转载)where?year?=?2001
Oracle开发课题之:报表函数(转载)group?by?region_id,?salesperson_id
Oracle开发课题之:报表函数(转载)order?by?region_id,?salesperson_id;


Oracle提供的Ratio_to_report函数允许我们计算每条记录在其对应记录集或其子集中所占的比例。

?

转载自:http://www.blogjava.net/pengpenglin/archive/2008/06/29/211462.html

热点排行