iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >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://www.lsjlt.com/news/140511.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 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
  • SQL SERVER 中怎么实现分组求和
    本篇文章给大家分享的是有关SQL SERVER 中怎么实现分组求和,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现sql语句SELEC...
    99+
    2024-04-02
  • mysql如何实现累加求和
    这篇文章主要介绍mysql如何实现累加求和,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! mysql实现累加求和的方法:1、创建数据表;2、通过inser...
    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
    数据库性能 可伸缩性 弹性计算
  • SQL SERVER 数据库备份代码实例
    本文实例为大家分享SQL SERVER数据库备份的具体代码,供大家参考,具体内容如下 SET NOCOUNT ON DECLARE @d varchar(8) DECLARE @Ba...
    99+
    2024-04-02
  • SQL Server中怎么实现日期计算
    这篇文章将为大家详细讲解有关SQL Server中怎么实现日期计算,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通常,你需要获得当前日期和计算一些其他的日期...
    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
  • 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
  • 使用SQL实现车流量的计算的示例代码
    目录卡口转换率1、查出每个地区下每个路段下的车流量2、通过错位连接获取每辆车的行车记录3、获取行车过程中的车辆数4、获取每个卡口的总车辆数5、求出卡口之间的转换率卡口转换率 将数据导...
    99+
    2024-04-02
  • Sql Server和Access怎么实现数据排名
    这篇文章主要介绍“Sql Server和Access怎么实现数据排名”,在日常操作中,相信很多人在Sql Server和Access怎么实现数据排名问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • oracle横向纵向求和代码实例
    有一张工资表SALARY如下, (NO 员工编号 ,MONEY 工资) NO    NAME     ITEM  ...
    99+
    2024-04-02
  • sql server中怎么使用over()函数实现分组统计
    本篇文章为大家展示了sql server中怎么使用over()函数实现分组统计,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。需求:求出以产品类别为分组,各个分组里价...
    99+
    2024-04-02
  • Mybatis4 之Mybatis动态sql的实现代码
    1.什么是动态SQL 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误。Mybatis的动态SQL功能正是为了解决这种问题, 其通过 if...
    99+
    2024-04-02
  • Oracle SQL中实现indexOf和lastIndexOf功能的思路及代码
    在 Oracle SQL 中,没有直接提供类似于 indexOf 和 lastIndexOf 的内置函数。但可以通过使用其他字符串函...
    99+
    2023-08-16
    Oracle
  • 实现SQL Server 原生数据从XML生成JSON数据的实例代码怎么编写
    实现SQL Server 原生数据从XML生成JSON数据的实例代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现...
    99+
    2024-04-02
  • js分页之如何实现前端代码和请求处理
    小编给大家分享一下js分页之如何实现前端代码和请求处理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下index.html<!DOCTYPE html> &...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作