gpt4 book ai didi

sql - 获取所有先前值的总和? - 到目前为止总共?

转载 作者:行者123 更新时间:2023-12-04 12:49:13 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
How do I calculate a running total in SQL without using a cursor?



这有点难以解释,所以我会用一个例子来展示我想要的:

假设我们有下表名为 MonthProfit :
[MonthId][Profit]
1, 10 -- January
2, 20 -- February
3, 30
4, 40
5, 50
6, 60
7, 70
8, 80
9, 90
10, 100
11, 110
12, 120 -- December

栏目 profit代表当月的利润。

但是,如果我们在 1 月份有 10 个利润,在 2 月份有 20 个利润,那么 2 月份我们的总利润为 30。

所以我想创建一个显示以下内容的 View :
[MonthId][Profit][ProfitTotal]
1, 10, 10 -- January
2, 20, 30 -- February
3, 30, 60
4, 40, 100
5, 50, 150
6, 60, 210
7, 70, 280
8, 80, 360
9, 90, 450
10, 100, 550
11, 110, 660
12, 120, 780 -- December

我现在为解决它所做的是这样的 View :
SELECT [MonthId]
,[Profit]
, (SELECT SUM([Profit])
FROM MonthProfit
WHERE [MonthId] <= outer.[MonthId]) as ProfitTotal
FROM MonthProfit as outer

但是,我认为这很慢,因为它必须一直重新计算所有内容,而且对我来说似乎不太优雅。有没有“好”的方法来做到这一点?

最佳答案

我在这里尝试了一个小例子供您引用,它根据要求生成结果

CREATE TABLE [dbo].[tbl_TotalPrevious](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50) NOT NULL,
[values] [bigint] NOT NULL)
将数据插入表格
insert into tbl_TotalPrevious values ('A', 10)
insert into tbl_TotalPrevious values ('B', 20)
insert into tbl_TotalPrevious values ('C', 10)
insert into tbl_TotalPrevious values ('D', 10)
insert into tbl_TotalPrevious values ('E', 10)
insert into tbl_TotalPrevious values ('F', 10)
insert into tbl_TotalPrevious values ('G', 10)
insert into tbl_TotalPrevious values ('H', 10)
insert into tbl_TotalPrevious values ('I', 10)
insert into tbl_TotalPrevious values ('J', 10)
insert into tbl_TotalPrevious values ('K', 10)
insert into tbl_TotalPrevious values ('L', 10)
insert into tbl_TotalPrevious values ('M', 10)
insert into tbl_TotalPrevious values ('N', 10)
insert into tbl_TotalPrevious values ('O', 10)
insert into tbl_TotalPrevious values ('P', 10)
insert into tbl_TotalPrevious values ('Q', 10)
insert into tbl_TotalPrevious values ('R', 10)
insert into tbl_TotalPrevious values ('S', 10)
insert into tbl_TotalPrevious values ('T', 10)
insert into tbl_TotalPrevious values ('U', 10)
insert into tbl_TotalPrevious values ('V', 10)
insert into tbl_TotalPrevious values ('W', 10)
insert into tbl_TotalPrevious values ('X', 10)
insert into tbl_TotalPrevious values ('Y', 10)
创建一个函数,例如。
ALTER FUNCTION testtotal 
(
@id int
)
RETURNS int
AS
BEGIN
DECLARE @Result int
SELECT @Result = (SELECT SUM([values])
FROM tbl_TotalPrevious
WHERE [id] <= @id)

RETURN @Result

END
GO
单一查询产生的结果
SELECT [id],[values], (dbo.testtotal(id)) as TotalVals FROM tbl_TotalPrevious 
希望以上内容可以解决您的时间问题,并根据需要更快地生成数据。
RESULTS IMAGE

关于sql - 获取所有先前值的总和? - 到目前为止总共?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8212962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com