--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
查詢結果:sql
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
查詢結果:ide
怎麼樣,是否是高級的函數簡潔優雅又高效,因此仍是跟緊微軟爸爸的步伐,不斷學習和使用新方法吧,不單單是充實本身,更重要是提升工做質量。函數