--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
怎么样,是否是高级的函数简洁优雅又高效,因此仍是跟紧微软爸爸的步伐,不断学习和使用新方法吧,不单单是充实本身,更重要是提升工做质量。函数