SQl中WITH與sum的小祕密!

在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 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

效果

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章