【问题标题】:SQL Server 2008 Cumulative Running TotalSQL Server 2008 累计运行总计
【发布时间】: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 语句并提供预期结果
  • 请将预期结果和实际结果发布为文本(不是图片)。如果有的话,也请尝试分享您的查询尝试
  • 更新了更多细节

标签: c# sql sql-server sql-server-2008 cumulative-sum


【解决方案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://stackoverflow.com/questions/5341584/sql-server-after-insert-trigger-update-another-column-in-the-same-table

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多