在統計中我們經常會面臨復雜的查詢,例如累加,最近也遇到一個很好的例子,今天我們一起來看看:
有一個關於銷售數據的視圖,字段有:emptyid(員工編號),ordermonth(月份,格式為'年-月-日'),qty(銷售額)。每個員工每個月只有一條記錄,部分內容如圖所示:

請你編寫查詢語句,按月份升序,統計出每個員工每個月對應的累積銷售額。
實現方式1:sqlserver2012及以上
--2012版及以上的實現方式,超簡單,一句話搞定 SELECT emptyid,ordermonth,qty, SUM(qty) OVER(PARTITION BY emptyid ORDER BY ordermonth ROWS unbounded preceding -- unbounded preceding只能在2012及以上版本中才能執行 ) AS s FROM dbo.EmpOders
查詢結果:
實現方式2:sqlserver2005&2008

1 /*1.先分區,並編號*/ 2 WITH cte AS 3 ( 4 SELECT emptyid AS emptyid ,ordermonth AS ordermonth,qty AS qty, 5 ROW_NUMBER() --編號。用於下一步的嵌套子查詢 6 OVER(PARTITION BY emptyid --根據不同員工編號,分成若干區 7 ORDER BY ordermonth --同一個分區內按月份升序 8 ) AS rnm 9 FROM dbo.EmpOders 10 ) 11 12 /*2.再累加。用到了嵌套子查詢*/ 13 SELECT emptyid,ordermonth,qty, 14 ( SELECT SUM(qty) 15 FROM cte t1 16 WHERE t1.rnm<=t2.rnm --累加月份的范圍是小於等於當前月份的 17 AND 18 t1.emptyid=t2.emptyid --保證是同一個員工的銷售額在做累加 19 ) AS '累積銷售額' 20 FROM cte t2
查詢結果:
結語
怎么樣,是不是高級的函數簡潔優雅又高效,所以還是跟緊微軟爸爸的步伐,不斷學習和使用新方法吧,不僅僅是充實自己,更重要是提高工作質量。