在统计中我们经常会面临复杂的查询,例如累加,最近也遇到一个很好的例子,今天我们一起来看看:
      有一个关于销售数据的视图,字段有: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. Linux和Windows下tomcat开机自启动设置

    Linux下tomcat的开机自启动设置 1.修改系统文件rc.local:vi /etc/rc.d/rc.local rc.local是给用户自定义启动时需要执行的文件,和windows里面的“启动 ...

  2. 3.html基础标签:表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 程序猿的日常——工作中常用的Shell脚本

    工作当中总是会有很多常用的linux或者命令,这里就做一个总结 文件远程拷贝 如果想把文件从本机拷贝到远程,或者从远程下载文件到本地. # 把本地的jar拷贝到远程机器xxxip的/home/sour ...

  4. 2.SlidingMenu(侧边栏效果)

    > 使用步骤库:别的程序可以用它的方法.图片. 下载的其中一个框架的例子是没有actionBar的,example_update 引入出错可能是俩个v4包冲突了,删掉工程里的一个,不要删了库里的 ...

  5. 怎样提供一个好的移动API接口服务/从零到一[开发篇]

    引语:现在互联网那么热,你手里没几个APP都不好意思跟别人打招呼!但是,难道APP就是全能的神吗?答案是否定的,除了优雅的APP前端展示,其实核心还是服务器端.数据的保存.查询.消息的推送,无不是在服 ...

  6. 第五篇: 路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统. 在Spring Cloud ...

  7. postgresql-磁盘空间不足问题排查

    问题背景 加压测试过程中发现插入数据过程中报错:could not write to hash-join temporary file: 设备上没有空间.但是查看服务器还有很多空闲空间,是什么导致这样 ...

  8. SVN 分支主干的相互合并

    1.主干合并到分支 1在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已经完全同步, 2.在/branches /MyProject上右键,依次选择”Tor ...

  9. C# DataGridView 在最左侧显示行号方法

    代码: private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { Da ...

  10. Spring Cloud Consul使用——配置中心

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...