天天看點

SQl中WITH與sum的小秘密!

在Sql2005以上的版本提供了With 關鍵字的以實作的遞歸的應用。同時,在sum(字段) over(partition by 字段1)也有着比較多的應用範圍。

在這裡以一個客戶的銷售記錄為基礎的應用,以便計算出累計與合計

資料例表如下:

create table SaleRecord
(
   cCusName varchar(1), /*客戶名稱*/
   m int,               /*月份*/
   imoney money         /*金額*/
)
           

資料範例如下:

SQl中WITH與sum的小秘密!

資料顯示要求:按月,按客戶展現當月金額,累計金額以及總計金額

with Record as (
select m,ccusname,imoney,imoney as lj 
from salerecord where m=1 
/*資料初始*/
union all
select sr.m,sr.ccusname,sr.imoney,sr.imoney+r.lj from record r
inner 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
           

效果

SQl中WITH與sum的小秘密!

這種方式較為友善,靈活應用可以形成更為豐富地應用效果。同時,With形成的遞歸中不能進行乘法運算;在遞歸過程中,支援變量與常量的累計;

這種方式在SqlServer 2005以上版本支援。

繼續閱讀