小编IFi*_*ink的帖子

根据条件重置同一分区中的运行总计

如今,使用 sum over partition可以非常轻松地对组进行总计。

我需要根据条件重置同一分区中的总计,如果一行中的某些字段为假,则应重置总和并从该行开始。在代码中这非常简单,只需循环行并检查条件即可。但是我们如何在 SQL 中实现这一点呢?

这是一个示例,它包含一个包含四个字段的表,以及一个对运行金额求和的查询。如果 ResetSum 字段为 true,则应重置总和。

CREATE TABLE dbo.Table_1
(
PersonID int NOT NULL,
Amount money NOT NULL,
PayDate date NOT NULL,
ResetSum bit NOT NULL
)

INSERT INTO Table_1 (PersonID, Amount, PayDate, ResetSum) 
VALUES  (1, 100, '2015-1-1', 0)
,(1,200,'2015-1-2',0)
,(1,180,'2015-1-3',0)
,(1,200,'2015-1-4',1)
,(1,200,'2015-1-5',0)
,(1,360,'2015-1-6',0)

SELECT *,SUM(Amount) over(PARTITION BY PersonID ORDER BY PayDate) as SumAmount
FROM Table_1 
Run Code Online (Sandbox Code Playgroud)

期望的结果应该是 760,而不是 1140。

记录不能按 ResetSum 字段进行分组,因为如果该字段为 true,则尽管该行中的 ResetField 为 false,但下面的所有字段都应重置。

这是我的 .net 代码示例,非常简单:

    Public Function SumTest() As Decimal …
Run Code Online (Sandbox Code Playgroud)

sum sql-server-2012

3
推荐指数
1
解决办法
3562
查看次数

标签 统计

sql-server-2012 ×1

sum ×1