2017-08-07 133 views
0

我需要计算加班费的运行总计 enter image description hereSQL Server 2008的累积运行总计

差异列计算ContractedHoursHours_delivered_in_period

在上面的例子之间的区别,他们在第二阶段工作时间为“-4”小时,在第十阶段工作时间为“+1”小时。
这应该总共为-3。然后在第11期,他们加班时间为“9.5”小时,但应该使他们回到正值“+6.5”

一旦他们回到整体积极的时间,它应该重置回0,因为他们不应该积累积极因为它们不应该被“保留”,因此它们总是重置为0.

它们可能在时期12中具有负差异,并且从时期11计算的正时数不应该被计数对于总数,因此小时应该返回到0,一旦小时积极

我怎样才能计算这个SQL Server 2008中运行“负”的总数来追踪亚迪?

编辑 - UPDATE

这里的例子列,我想在SQL这样做,我在Excel中所做的和我想知道怎么做,列在SQL叫做“他们Undertime “

Excel的forumula是 ”= IF(OR(H2 < 0,H3 < 0),H 2 + I 3)“

enter image description here

我的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' 
+0

你需要一个SQL触发后更新所涉及的专栏。 – Amit

+0

只留下几列(在您的查询中使用的那些列),生成INSERT语句并提供预期结果 –

+0

请将预期结果和实际结果作为文本(而非图片)发布。也尝试共享您的查询尝试(如果有) – TheGameiswar

回答

0

如果我理解正确的问题,你问到获得difference列在那里它是负的总和。在这种情况下,此查询应该做的伎俩:

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

这只是在负面时段过滤,并没有考虑到正面时段。 –

+0

这就是我认为问题所在,我的不好。 – Aaron

0

使用窗函数:

注...这是假设differencefromzero去积极和消极的。

+0

我刚刚意识到,这并不完全符合你的需求,因为它在*运行总数后进行调零,而不是在 – JohnHC

+0

年,尽管这似乎很接近... –

+0

与零位的差值总是负值,因为它只追踪负面小时数。如果它的积极,那么它总是0. –