如何根据一列的累积和查询?

时间:2019-01-31 17:29:30

标签: sql-server tsql

所以假设我有下表:

enter image description here

现在假设该查询是:

SELECT
    JobNo,
    WorkCenter,
    EstimMinutes
FROM Schedule
WHERE WorkCenter = 'Grinding'

现在假设Grinding的每日工作量为500分钟,因此,如果我要给他们今天的时间表,我只想显示工作,直到工作超过500分钟。因此,在这种情况下,我只想返回以绿色突出显示的行,这些行的总估计时间为505。我将如何去做?

我尝试做:

WHERE SUM(EstimMinutes) < 500

但这显然不起作用。不确定是否可以这样做,如果可以,我应该朝哪个方向前进。非常感谢您的帮助

3 个答案:

答案 0 :(得分:4)

我会根据通用表表达式为您提出一个解决方案:

WITH CTE AS (
SELECT
    JobNo,
    WorkCenter,
    EstimMinutes,
    SUM(EstimMinutes) OVER (PARTITION BY WorkCenter 
                            ORDER BY JobNo) AS CumulatedMinutes
FROM Schedule
WHERE WorkCenter = 'Grinding')
SELECT * 
FROM CTE
WHERE CumulatedMinutes < 500;

答案 1 :(得分:0)

最快的方法是使用子查询,如果要显示累积值,也可以使用CROSS APPLY。请注意,在这里,我只添加了检查中的以前的作业,没有添加当前的作业,因为我们确实希望显示超过500个的作业

SELECT t1.* from table t1
             where 500 >=
                     (SELECT SUM(EstimMinutes) X
                                             FROM table t2
                                             WHERE t2.JobNo<t1.jobno 
                                                 and t1.workcentre = t2.workcentre)

答案 2 :(得分:0)

您可以添加另一列,并使其值为EstimMinutes的运行总和,然后按计算出的列进行过滤。

SELECT t.JobNo, t.WorkCenter, t.EstimMinutes
FROM (
    SELECT JobNo, WorkCenter, EstimMinutes,
    SUM(EstimMinutes) OVER (ORDER BY JobNo) AS RunningTotal
    FROM Schedule
    WHERE WorkCenter = 'Grinding'
    AND RunningTotal <= 500
) as t