在统计中我们经常会面临复杂的查询,例如累加,最近也遇到一个很好的例子,今天我们一起来看看:
      有一个关于销售数据的视图,字段有: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.先分区,并编号*/
WITH cte AS
(
SELECT emptyid AS emptyid ,ordermonth AS ordermonth,qty AS qty,
ROW_NUMBER() --编号。用于下一步的嵌套子查询
OVER(PARTITION BY emptyid --根据不同员工编号,分成若干区
ORDER BY ordermonth --同一个分区内按月份升序
) AS rnm
FROM dbo.EmpOders
) /*2.再累加。用到了嵌套子查询*/
SELECT emptyid,ordermonth,qty,
( SELECT SUM(qty)
FROM cte t1
WHERE t1.rnm<=t2.rnm --累加月份的范围是小于等于当前月份的
AND
t1.emptyid=t2.emptyid --保证是同一个员工的销售额在做累加
) AS '累积销售额'
FROM cte t2

查询结果:

结语

怎么样,是不是高级的函数简洁优雅又高效,所以还是跟紧微软爸爸的步伐,不断学习和使用新方法吧,不仅仅是充实自己,更重要是提高工作质量。

 

sqlserver每行都有累加,你怎么搞,窗口函数来帮忙!!!的更多相关文章

  1. Sqlserver获取行号

    Sqlserver获取行号   select row_number()over(order by userid )as RowNum,*from OUM_User

  2. 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

    // 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...

  3. 听说,霸都.NET技术社区准备搞线下聚会了?

    嗨,你听说了没有?霸都.NET技术社区准备搞线下聚会了! 啥时候的事情啊? 最近才知道的消息啊! 那你是从哪里知道的消息呢? .NET Core项目实战交流群(637326624)啊! 那这次合肥.N ...

  4. 设置SQLServer的行版本控制隔离级别

    1.--查询数据库状态 select name,user_access,user_access_desc,snapshot_isolation_state,snapshot_isolation_sta ...

  5. sqlserver 获得行号作为唯一id

    当sqlserver创建的view没有唯一的标识字段里,entity framework codefirst配置会出现错误,因为取其行号作为唯一标识列 CREATE VIEW [SafeWatch]. ...

  6. 详解Apache服务与高级配置,(主配置文件每行都有描述)

    HTTP服务---> http://httpd.apache.org/(官方网站) httpd  service :纯粹的web服务器,同时开源(不是GPL). 特性:1.在进程特性上通常是事先 ...

  7. SQLServer处理行转列和列转行

    掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...

  8. jquery的上传控件uploadly,每行都有一个这样的控件对id选择器的使用

    1.先看看预览图 这个是我的页面,其中如果我没点击添加一行的时候,会把本来有的数据进行循环出来,这个时候每个记录都必须有个上传图片的按钮,但是jquery的uploadly这个控件只是锁定id的,至少 ...

  9. SqlServer PIVOT行转列

    PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合. 测试数据 INSERT INTO [TestRows2Columns] ...

随机推荐

  1. JavaScript对象编程-第3章

    目录 Date对象 Math对象 数组对象 字符串对象 正则表达式对象 什么是对象 对象拥有属性和方法,属性各种数据类型,方法对属性中的数据进行操作. JavaScript的对象 内置对象 Date. ...

  2. webpack中使用typescript

    概述 这是我学习webpack中使用typescript的记录,供以后开发时参考,相信对其他人也有用. 学习typescript建议直接看中文文档或英文文档,休闲之余可以看这篇TypeScript 总 ...

  3. 使用cygwin中的awk工具进行mysql binlog日志查看[利刃篇]

    linux工具确实强悍,然而作为没有linux机器使用权以及开发没有使用linux进行的人,有时想用一些命令确实不方便,所以,才去试着用用cygwin,一款在windows平台上运行的类UNIX模拟环 ...

  4. 设置win版vim启动项[利刃篇]

    vim默认启动设置有时不太好,想改一下,但是又不像windows其他软件那样,界面设置后就生效,这里需要手动设置文件才可以,那就赶紧设置一下吧! 修改文件为 vim安装目录/_vimrc 文件,或者在 ...

  5. Setting Up Swagger 2 with a Spring REST API

    Last modified: August 30, 2016 REST, SPRING by baeldung If you're new here, join the next webinar: & ...

  6. ASP.NET Web API实现微信公众平台开发(三)自定义菜单

    承接之前的流程,在完成服务器绑定和获取access_token之后,本文主要讲述如何实现微信自定义菜单. 官方示例效果 开始之前 .自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. ...

  7. Mongodb 无法启动 windows Mongodb 无法启动 couldn't connect to server

      发现在mongodb.log里出现  2017-07-07T17:01:55.339+0800 I CONTROL  [main] Error connecting to the Service ...

  8. asp.net mvc开发过程中的一些小细节

    现在做网站用mvc越来越普及了,其好处就不说了,在这里只记录一些很多人都容易忽视的地方. 引用本地css和js文件的写法 这应该是最不受重视的地方,有同事也说我有点小题大作,但我觉得用mvc还是得有一 ...

  9. webServlet("/") 和 webServlet("/*") 的区别

    “/” 默认放行了jsp,也就是jsp文件不执行下面的service方法,其他都执行 “/*”  全部执行

  10. 判断URL中的中文参数是GB2312还是Utf-8编码

    如两个URL字符串: &q=%E8%A3%99%E5%AD%90&style=grid&seller_type=taobao &q=%CE%D0%C2%D6%D4%F6 ...