SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用

由于前一段时间胃痛,导致博客园博客都停更了一个月左右。近几天,胃病终于稍微有所好转,决定重新写博文。
前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份、月份销售额,而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和。尼玛,感觉还是没有说清,下面用图表示。

SQL 测试表脚本
DECLARE @Temp Table
(
ID INT, --- 月份
MoneyData Float --- 金额
) insert INTO @TEMP
SELECT 1,100 UNION ALL
SELECT 2,200 UNION ALL
SELECT 3,300 UNION ALL
SELECT 4,400 UNION ALL
SELECT 5,500 UNION ALL
SELECT 6,600 UNION ALL
SELECT 7,600
一 自连接
SELECT A.ID, SUM(B.MoneyData) FROM @Temp A INNER JOIN @Temp B
ON A.ID>=B.ID GROUP BY A.ID ------ 重点在于 ON 条件,通过自连接 A.ID >= B.ID ,可获取所需数据,再通过
GROUP BY 、SUM 即可统计求和
二 开窗函数
SELECT ID, MoneyData, SUM(MoneyData) OVER( ) AS '总销售额',
SUM(MoneyData) OVER( PARTITION BY ID ) AS '月销售额',
SUM(MoneyData) OVER( ORDER BY ID ASC) AS '当月+当月前销售额'
FROM @Temp ---- 此处,使用开窗函数使用更为简单,不过,其中 SUM() OVER ( ORDER BY ID ASC ) 即可实现以上功能

关于,开窗函数的具体用法,可参考微软 MSDN 官方 API 文档,最后,推荐一本开窗函数书:基于 SQL SERVER 2012 窗口函数。
参考:https://msdn.microsoft.com/zh-cn/library/ms173454.aspx
SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用的更多相关文章
- SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...
- 【转】SQL SERVER 开窗函数简介
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 以SQL SERVER中分面页为例,按时间顺序列出定单号. WITH OrderInfo AS ( SELECT ROW ...
- SQL SERVER开窗函数
作为一名开发人员来讲,我感觉在职场白混了好多年,可能是自己真的没有进取的精神吧,看了<程序员的SQL金典>这本电子书,真的让我学到了不少知识,真心喜欢这本电子书,书中讲解的内容比较好懂,也 ...
- Sql server 开窗函数over()的语法
用法一:与ROW_NUMBER()函数结合用,给结果进行排序编号,如图: 代码如下: SELECT ROW_NUMBER() over(order by RequiredDate) num ,* fr ...
- Sql Server 开窗函数Over()的使用
利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table( ProductID int, ProductName ), ProductType ), Price in ...
- sql server聚合函数sum计算出来为空,怎样返回0
通常我们计算数据库中表的数据有几个常用的聚合函数 1.count : 计数 2.sum: 计算总和 3.avg: 取平均值 4.max: 取最大值 5.min: 取最小值 6.isnull: 当返回数 ...
- SQL Server - 开窗函数
-- 开窗函数:在结果集的基础上进一步处理(聚合操作) SELECT * FROM dbo.Student S# Sname Sage Ssex ---------- ---------- ----- ...
- SQL Server开窗函数之OVER子句、PARTITION BY 子句
开窗函数与聚合函数一样,都是对行的集合组进行聚合计算.它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同 ...
- sql over开窗函数,
sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...
随机推荐
- android.os.NetworkOnMainThreadException解决
很早就知道Android4.0以后,要把耗时的网络操作放在多线程中,处理方法有: 1) setContentView(R.layout.activity_main)下面加上如下代码 if (andro ...
- Symfony2学习笔记之HTTP Cache
富web应用程序的本质意味着它们的动态.无论你的应用程序多么有效率,每个请求比起静态文件来说总会存在很多的耗费.对于大多数web程序来说,这没什么. Symfony2非常的轻快,无论你做些严重超载的请 ...
- 清除Xcode缓存和存档文件
XCode4.2 finder中找到 /Users/Library/Developer/Xcode (注:Library资源库是隐藏的文件夹) 里面有DerivedData和Snaps ...
- 自定义View(二)--继承自ViewGroup
自定义View包括很多种,上一次随笔中的那一种是完全继承自View,这次写的这个小Demo是继承自ViewGroup的,主要是将自定义View继承自ViewGroup的这个流程来梳理一下,这次的Dem ...
- sql server 数据库的操作
Technorati 标记: sql截取,sql修改 把一个字段的部分取出来,插入到新字段 1 ) //方法二 sql server修改一个字段中的部分数据 update tablename se ...
- Linux目录初识
/ 根目录 /bin 存放必要的命令 /boot 存放内核以及启动所需的文件/dev 存放设备文件 /etc 存放系统配置文件 /home 普通用户的宿主目录,用户数据存放在其主目录中 /lib 存放 ...
- matlab 调用VLfeat库开篇问题
准备工作见此网站 :http://cnyubin.com/?p=85 保存关闭startup.m文件后 重新打开matlab后 在命令行输入path或者vl_version无法检测到库已安装到matl ...
- Python 以指定概率获取元素
这是Python cookbook的示例 1 def random_pick(some_list,probabilities): 2 x=random.uniform(0,1) 3 cumulativ ...
- BITED数学建模七日谈之六:组队建议和比赛流程建议
今天进入数学建模经验谈第六天:组队建议和比赛流程建议 数学模型的组队非常重要,三个人的团队一定要有分工明确而且互有合作,三个人都有其各自的特长,这样在某方面的问题的处理上才会保持高效率. 三个人的分工 ...
- JavaScript基础知识整理(1)数组
第一:创建. 1,var arr= new Array(); //数组为空.长度为0. arr[0]="apple"; arr[1]="orange"; arr ...