SQl中WITH与sum的小秘密!

来源:互联网 发布:口腔溃疡漱口水知乎 编辑:程序博客网 时间:2024/04/28 16:59

在Sql2005以上的版本提供了With 关键字的以实现的递归的应用。同时,在sum(字段) over(partition by 字段1)也有着比较多的应用范围。

在这里以一个客户的销售记录为基础的应用,以便计算出累计与合计

数据例表如下:

create table SaleRecord(   cCusName varchar(1), /*客户名称*/   m int,               /*月份*/   imoney money         /*金额*/)

数据范例如下:

数据显示要求:按月,按客户体现当月金额,累计金额以及总计金额

with Record as (select m,ccusname,imoney,imoney as lj from salerecord where m=1 /*数据初始*/union allselect sr.m,sr.ccusname,sr.imoney,sr.imoney+r.lj from record rinner join salerecord sr on r.m+1=sr.m and r.ccusname=sr.ccusname/*其它月份,特别是sr.imoney+r.lj进行累计*/)select M,CCUSNAME,SUM(IMONEY) OVER (PARTITION BY M,CCUSNAME) AS IMONEY,/*当月金额*/lj,/*累计金额*/SUM(IMONEY) OVER (PARTITION BY CCUSNAME) AS TOTAL /*总计金额*/from Record ORDER BY CCUSNAME,M

效果

这种方式较为方便,灵活应用可以形成更为丰富地应用效果。同时,With形成的递归中不能进行乘法运算;在递归过程中,支持变量与常量的累计;

这种方式在SqlServer 2005以上版本支持。

0 0
原创粉丝点击