这两天写的SQL使用到了联机分析函数,自己之前完全没使用过!
参考了以下blog
http://xsb.itpub.net/post/419/33028
http://www.cnblogs.com/sunsonbaby/archive/2004/09/29/47876.aspx
这两篇博客介绍得最详细!!现学现用,感觉挺好
select E.地区,E.彩种,E.时段, E.销售票数, E.销售金额,E.销售增长率,E.本次销售排名,E.本次增长率排名,E.上次销量,E.上次销量排名,E.上上次销量,E.上次增长率排名,(E.本次增长率排名-E.上次销量排名)销售排名走势,(E.本次增长率排名-E.上次增长率排名)增长率走势 from
(
Select A.地区,
A.彩种,
A.时段,
A.销售票数,
A.销售金额,
decode(A.上次销量,0,'0%',round( ((A.销售金额 - A.上次销量) / A.上次销量) * 100, 2) || '%' )销售增长率,
rank() over(order by A.销售金额 desc) 本次销售排名,
rank() over(order by decode(A.上次销量,0,0,round(((A.销售金额 - A.上次销量) / A.上次销量) * 100, 2)) desc) 本次增长率排名,
A.上次销量, --A.上次销量,
rank() over(order by A.上次销量 desc) 上次销量排名,
A.上上次销量,--上上次销量
rank() over(order by decode(A.上上次销量,0,0,round(((A.销售金额 - A.上次销量) / A.上次销量) * 100, 2)) desc )上次增长率排名
from (select C.AREA_NAME 地区,
D.Playtype_Name 彩种,
to_char(open_result_time, 'yyyy-mm') 时段,
sum(A.sell_count) 销售票数,
sum(A.sell_amount) 销售金额,
lag(sum(A.Sell_Amount), 1, 0) over(partition by AREA_NAME,Playtype_Name order by to_char(open_result_time, 'yyyy-mm')) 上次销量,
lag(sum(A.Sell_Amount), 2, 0) over(partition by AREA_NAME ,Playtype_Name order by to_char(open_result_time, 'yyyy-mm')) 上上次销量
from terminal_sell A, SALES_OUTLETS_INFO B, area C, playtype D
where D.PLAYTYPE_ID(+) = A.Lottery_Type
and C.AREA_ID(+) = B.Area_Id
and B.Sell_Id(+) = A.Terminal_Sell_Id
group by AREA_NAME,Playtype_Name ,to_char(open_result_time, 'yyyy-mm')
) A
) E
imp omas/omas@omas fromuser=omas touser=omas IGNORE=Y file=c:\\anhui_sellData080520.dmp
posted on 2007-11-29 15:32
有猫相伴的日子 阅读(381)
评论(0) 编辑 收藏 所属分类:
pl/sql