返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >sql server 累计求和实现代码
  • 675
分享到

sql server 累计求和实现代码

2024-04-02 19:04:59 675人浏览 八月长安
摘要

看了一眼自关联,没搞懂,试了一下也没成功。 over方式一下结果就出来了,好用。 --第一步,准备测试数据 --IF OBJECT_ID(N'dbo.t') IS NOT NULL

看了一眼自关联,没搞懂,试了一下也没成功。

over方式一下结果就出来了,好用。


--第一步,准备测试数据
--IF OBJECT_ID(N'dbo.t') IS NOT NULL
--	DROP TABLE dbo.t;
--Go
--CREATE TABLE dbo.t
--(
--	i BIGINT IDENTITY(1, 1) PRIMARY KEY,
--	d MONEY
--);
--INSERT t
--	d
--)
--SELECT TOP 31465
--	   ROUND(10000 * RAND(CHECKSUM(NEWID())), 2)
--FROM sys.all_objects AS a
--	CROSS JOIN sys.all_objects;
----第二步,创建记录时间的表格
--IF OBJECT_ID(N'dbo.record_time') IS NOT NULL
--	DROP TABLE dbo.record_time;
--CREATE TABLE dbo.record_time
--	i INT IDENTITY PRIMARY KEY,
--	算法 NVARCHAR(10),
--	bt DATETIME2,--开始时间
--	et DATETIME2,--结束时间
--	idiff AS DATEDIFF(ms, bt, et)--所用的毫秒数
--第一种方法,自连接法,SQL Server 2008以上版本测试通过,157255661.40
SET STATISTICS TIME OFF;
SET STATISTICS io OFF;
GO
DECLARE @bt DATETIME2 = GETDATE();
SELECT a.i,
       a.d,
       SUM(b.d) AS total_sum
FROM dbo.t AS a
    INNER JOIN dbo.t AS b
        ON b.i <= a.i
GROUP BY a.i,
         a.d;
DECLARE @et DATETIME2 = GETDATE();
INSERT INTO dbo.record_time
(
    算法,
    bt,
    et
)
VALUES
('自连接', @bt, @et);
--ORDER BY a.i;
;
--第二种方法,递归sql server 2008以上版本测试通过,157255661.40
WITH cte_total_sum
AS (SELECT i,
           d,
           d AS total_sum
    FROM dbo.t
    WHERE i = 1
    UNION ALL
    SELECT s.i,
           s.d,
           p.total_sum + s.d AS total_sum
    FROM dbo.t AS s
        INNER JOIN cte_total_sum AS p
            ON s.i - 1 = p.i)
SELECT *
FROM cte_total_sum
OPTION (MAXRECURSION 0);
('递归', @bt, @et);
--第三种方法,over 子句,sql server 2012测试通过,sql server 2008不支持,157255661.40
SELECT i,
       d,
       SUM(d) OVER (ORDER BY i) AS total_sum
FROM dbo.t;
('over子句', @bt, @et);
--第四种,相关子查询,sql server 2008以上版本测试通过,156625045.22
SELECT outquery.i,
       outquery.d,
       (
           SELECT SUM(innerq.d) FROM dbo.t AS innerq WHERE innerq.i <= outquery.i
       ) AS ct --内部查询
FROM dbo.t AS outquery;
('相关子查询', @bt, @et);
--ORDER BY outquery.i; --外部查询
--游标方法,有两种方法可以实现,一种是临时表更新,一种是变量叠加更新,157255661.40
--先增加一个存储累计和的列
--第5种,游标_临时表更新
--ALTER TABLE dbo.t ADD total_d MONEY DEFAULT (0);--只运行一次
DECLARE @t TABLE --定义表变量,存储累计求和临时结果
    i INT PRIMARY KEY IDENTITY,
    d MONEY,
    total_d MONEY
);
DECLARE @i INT = 0,
        @d MONEY = 0,
        @total_d MONEY = 0;
DECLARE c1 CURSOR FOR SELECT i, d FROM dbo.t ORDER BY i;
OPEN c1;
FETCH c1
INTO @i,
     @d;
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @total_d += @d;
    INSERT INTO @t
    (
        d,
        total_d
    )
    VALUES
    (@d, @total_d);
    FETCH c1
    INTO @i,
         @d;
END;
CLOSE c1;
DEALLOCATE c1;
UPDATE dbo.t
SET total_d = b.total_d
    INNER JOIN @t AS b
        ON a.i = b.i;
('游标_临时表更新', @bt, @et);
--第6种,游标_变量叠加更新
DECLARE c1 CURSOR FOR SELECT i, d FROM dbo.t; --ORDER BY i;
    UPDATE dbo.t
    SET total_d = @total_d
    WHERE i = @i;
('游标_变量叠加更新', @bt, @et);
--执行时间 over子句<游标临时表更新<游标变量叠加更新<自连接<相关子查询<递归查询

补充:下面看下SQL server 累加求和

SQL server 累加求和

1.

SELECT SalesOrderID, ProductID, OrderQty
    ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS Total
    ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Avg"
    ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Count"
    ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Min"
    ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Max"
FROM Sales.SalesOrderDetail 
WHERE SalesOrderID IN(43659,43664);

2.

select SchSno,convert(varchar(10),a.Dates,120) Dates,
sum(Amt_avail) over(partition by SchSno order by convert(varchar(10),a.Dates,120)) as PeriodPreAmt
from jr_creditUserAcct a

到此这篇关于sql server 累计求和实现代码的文章就介绍到这了,更多相关sql server 累计求和内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: sql server 累计求和实现代码

本文链接: https://lsjlt.com/news/140511.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • sql server 累计求和实现代码
    看了一眼自关联,没搞懂,试了一下也没成功。 over方式一下结果就出来了,好用。 --第一步,准备测试数据 --IF OBJECT_ID(N'dbo.t') IS NOT NULL...
    99+
    2024-04-02
  • sql怎么实现月累计求和
    在 SQL 中,可以使用窗口函数来实现月份的累计求和。具体地,可以使用 SUM 函数结合 OVER 子句来实现。下面是一个示例 SQ...
    99+
    2024-04-09
    sql
  • python累加求和代码怎么写
    这篇文章主要介绍“python累加求和代码怎么写”,在日常操作中,相信很多人在python累加求和代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python累加求和代码怎么写”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • mysql如何实现累加求和
    这篇文章主要介绍mysql如何实现累加求和,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! mysql实现累加求和的方法:1、创建数据表;2、通过inser...
    99+
    2024-04-02
  • SQL SERVER 中怎么实现分组求和
    本篇文章给大家分享的是有关SQL SERVER 中怎么实现分组求和,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现sql语句SELEC...
    99+
    2024-04-02
  • 怎么在python中实现累加求和
    怎么在python中实现累加求和?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(...
    99+
    2023-06-14
  • SQL Server和MySQL在云计算时代的表现如何?
    SQL Server和MySQL是两个非常知名的关系型数据库管理系统,它们都在云计算时代中发挥了重要作用。本文将探讨SQL Server和MySQL在云计算时代的表现,并分析其特点和优势。云计算是指通过网络连接远程的服务器和其他设备,提供计...
    99+
    2023-10-22
    数据库性能 可伸缩性 弹性计算
  • ECShop显示某商品销售累计效果的实现代码
     通过学习、查询,解决该问题。 参照文章:http://www.ecshop120.com/ecshop-mobanxiugai/article-19.html 方案如下: 修改 includes/lib_in...
    99+
    2022-06-12
    ECShop 累计
  • SQL SERVER 数据库备份代码实例
    本文实例为大家分享SQL SERVER数据库备份的具体代码,供大家参考,具体内容如下 SET NOCOUNT ON DECLARE @d varchar(8) DECLARE @Ba...
    99+
    2024-04-02
  • c语言实现1~n累加求和的方法
    这篇文章给大家分享的是有关c语言实现1~n累加求和的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。for循环,语法“for(i=1;i<=n;i++){s=s+i;}”;2、while循环,语法“whi...
    99+
    2023-06-14
  • SQL Server中怎么实现日期计算
    这篇文章将为大家详细讲解有关SQL Server中怎么实现日期计算,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通常,你需要获得当前日期和计算一些其他的日期...
    99+
    2024-04-02
  • Monaco Editor实现sql和java代码提示实现示例
    目录monaco editor创建sql提示(库表字段关联)java自定义联想monaco editor创建 //创建和设置值 if (!this.monacoEditor) { ...
    99+
    2022-11-13
    Monaco Editor代码提示 sql java代码提示
  • Python实现代码统计(代码+注释+空
    # -*- coding: utf-8 -*- """ Created on Thu Apr 17 17:15:40 2014 @author: author """ import os; path_head = '代码路径头部' path...
    99+
    2023-01-31
    代码 注释 Python
  • PowerShell:30行代码轻松实现SQL Server数据库容量监控
    本文介绍如何用PowerShell脚本实现SQL Server数据库容量监控闲话就不多说,直入主题一、建表为每台服务器创建一个表,用于记录服务器各个数据库的容量,以服务器名作为表名。CREATE ...
    99+
    2024-04-02
  • 使用SQL实现车流量的计算的示例代码
    目录卡口转换率1、查出每个地区下每个路段下的车流量2、通过错位连接获取每辆车的行车记录3、获取行车过程中的车辆数4、获取每个卡口的总车辆数5、求出卡口之间的转换率卡口转换率 将数据导...
    99+
    2024-04-02
  • oracle横向纵向求和代码实例
    有一张工资表SALARY如下, (NO 员工编号 ,MONEY 工资) NO    NAME     ITEM  ...
    99+
    2024-04-02
  • Sql Server和Access怎么实现数据排名
    这篇文章主要介绍“Sql Server和Access怎么实现数据排名”,在日常操作中,相信很多人在Sql Server和Access怎么实现数据排名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • android计算器简单实现代码
    本文实例为大家分享了android计算器的具体实现代码,供大家参考,具体内容如下 java代码: package com.itheima74.simplecalculat...
    99+
    2022-06-06
    Android
  • Android计步功能的实现代码
    本文对原文计步项目进行了精简,移除了进程服务和计时、守护进程、数据库保存等等,方便扩展功能。 Android4.4以上版本,有些手机有计步传感器可以直接使用, 而有些手机没有,...
    99+
    2022-06-06
    Android
  • android实现倒计时功能代码
    效果图,每隔1秒,变换一下时间  xml: 代码如下: <RelativeLayout xmlns:android="http://schemas.andro...
    99+
    2022-06-06
    倒计时 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作