SQL Server 2008 累计运行总计

Posted

技术标签:

【中文标题】SQL Server 2008 累计运行总计【英文标题】:SQL Server 2008 Cumulative Running Total 【发布时间】:2018-01-14 22:51:45 【问题描述】:

我需要计算加班费的累计总额

difference 列计算 ContractedHoursHours_delivered_in_period

之间的差异

在上面的示例中,他们在第 2 期工作“-4”小时,在第 10 期加班“+1”小时。 这应该给出总的-3。然后在第 11 阶段,他们加班了“9.5”小时,但这应该会使他们恢复到积极的“+6.5”

一旦他们回到正小时数,那么它应该重置回 0,因为他们不应该累积正小时数,因为他们每个月都有报酬,因此他们不应该被“保留”,所以他们总是重置回 0。

然后它们可能在第 12 期有负差异,并且从第 11 期计算得出的正小时数不应计入总数,因此一旦小时数为正数,小时数应回到 0

如何在 SQL Server 2008 中计算此运行“负数”总数以跟踪不足时间?

编辑 - 更新

这是我想在 SQL 中完成的示例列,我已经在 excel 中完成了,我想知道如何在 SQL 中执行名为“他们是否超时”的列

Excel 公式是“=IF(OR(H2

我的 SQL 尝试如下,但是它没有添加差异,它保持在“-4”并且不添加下一个值。

SELECT  T1.* ,
    T2.RunningSum
FROM    Staff_Tracked_Hours As T1
    CROSS APPLY ( SELECT    sum(differencefromzero) AS RunningSum
                  FROM      dbo.Staff_Tracked_Hours AS CAT1
                  WHERE     ( CAT1.Id <= T1.Id and CAT1.personID ='000033485' )
                ) AS T2

                where t1.personID ='000033485'

【问题讨论】:

您需要一个 sql AF​​TER 触发器来更新相关列。 只保留几列(查询中使用的列),生成 INSERT 语句并提供预期结果 请将预期结果和实际结果发布为文本(不是图片)。如果有的话,也请尝试分享您的查询尝试 更新了更多细节 【参考方案1】:

如果我对问题的理解正确,您要求得到 difference 列的总和,其中它是负数。在这种情况下,这个查询应该可以解决问题:

Select personID, SUM(difference)
From [table_name]
Where difference < 0
Group by personID

【讨论】:

只过滤负数周期,不考虑正数周期。 这就是我认为问题要问的,我的错。【参考方案2】:

使用窗口函数:

with CTE as
(
select id, personid, year, period, 
       sum(differencefromzero) over (partition by personid order by year, period) as cumu_total
from MyTable
)

select id,  personid, year, period, 
       case when cumu_total < 0 then cumu_total else 0 end as new_difference
from CTE

注意...这假设 differencefromzero 既是正数也是负数。

【讨论】:

我刚刚意识到,这并不能完全满足您的需要,因为它在运行总计之后进行归零,而不是在 differencefromzero 始终为负数,因为它仅跟踪负数小时数。如果它是正数,那么它总是 0。 @DavidHayward 我认为这可能最好作为一个过程而不是一个查询来处理......【参考方案3】:

您可以使用 AFTER 或 INSTEAD OF 触发器,如下面的链接所示。

https://***.com/questions/5341584/sql-server-after-insert-trigger-update-another-column-in-the-same-table

【讨论】:

以上是关于SQL Server 2008 累计运行总计的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中的计算列上运行总计

在 SQL Server 中计算运行总计

SQL Server 2012 Windowing 函数计算运行总计

SQL Server 报表生成器 - 仅显示运行总计

在 MS SQL Server 2008 的 Pivot 中计算水平总计

SQL Server Reporting Services 在聚合数据上运行总计