SQL Server 2008累积运行总计

时间:2017-08-07 15:07:21

标签: c# sql sql-server sql-server-2008 running-total

我需要计算加班费的运行总额 enter image description here

差异列计算 ContractedHours Hours_delivered_in_period

之间的差异

在上面的例子中,他们工作了#34; -4"第2期的小时数和" + 1"加时赛10小时加班。
这应该总共-3。然后在第11期,他们工作了" 9.5"加班时间,但这应该使他们恢复正面" + 6.5"

一旦他们整体回到正面时间,那么它应该重新设置为0,因为他们不应该累积积极的工作时间,因为他们每月支付,所以他们不应该保持",所以他们总是重置为0.

然后他们可能在第12期有负差异,而11期计算的积极时间不应计入总数,因此小时数应为正数时小时应该回到0

如何计算此运行"否定" SQL Server 2008中的总数来跟踪时间吗?

编辑 - 更新

这是我想在SQL中用excel完成的示例列,我想知道如何在SQL中执行这个名为&#34的列;他们是Undertime"

Excel论坛是&#34; = IF(OR(H2 <0,H3&lt; 0),H2 + I3)&#34;

enter image description here

我的SQL尝试在下面,但它没有添加差异,它保持在&#34; -4&#34;并且不会添加下一个值。

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'

3 个答案:

答案 0 :(得分:0)

如果我理解正确的问题,那么您要求@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) { html { -webkit-text-size-adjust: none; /* none for no scaling */ } } 列的总和为负数。在这种情况下,此查询应该可以解决问题:

difference

答案 1 :(得分:0)

使用窗口功能:

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

注意......这假设差异从零开始变为正数和负数。

答案 2 :(得分:-1)