开窗函数-跨层累计

编辑
文档创建者:zsh331 (73316 )     浏览次数:1775次     编辑次数:4次     最近更新:ukae 于 2018-08-15     

       注意事项:由于8.0设计器内置的是sqlite数据库,在使用上很多语法都不支持,请将sqlite数据库文件迁移到主流数据库(MySql、MSSQL、Oracle…)后运行。

       迁移方法:使用第三方软件迁移内置FRDemo数据库到指定数据库

本文运行环境:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 

                       Copyright (c) Microsoft Corporation

                       Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


目录:

一、问题描述编辑

【逐层累计】是每一组中将每层与上一层数据相加,得到这一层的累计结果。【跨层累计】不是每组分别累计,而是从第二组开始在上一组的累计结果上继续累计。除了通过单元格设置实现此功能外,我们接下来介绍一种直接在数据集中实现的新方法,如下图:
222

二、实现思路编辑

在创建数据集时用sql的开窗排名函数【ROW_NUMBER() OVER (ORDER BY)】处理,然后进行字段的直接调用。

SELECT t.*,sum(t.销量) over(order by t.年份,t.月份) as 年度累计 FROM 大陆车辆销售 t;  

三、实例编辑

3.1 实测数据

打开设计器自带的FRDemo库中的【大陆汽车销售】表:

222

3.2 跨层累计脚本

SELECT t.*, SUM (t.销量) OVER (ORDER BY t.年份, t.月份) AS 年度累计 FROM 大陆车辆销售 t; 

3.3 效果预览

执行上述sql脚本,效果如下:

222

注1: 请注意区分【逐层累计】与【跨层累计】

1.数据集sql实现【逐层累计】请参考:开窗函数-逐层累计 2.单元格实现逐层累计请参考:逐层累计3.单元格实现跨层累计请参考:跨层累计

注2:开窗函数支持的数据库有限,sqlserver2012以及oracle支持,而sqlserver2008不支持。请尽量使用支持的数据库。

附件列表


主题: 专题总结
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?