所以假设我有下表:
现在假设该查询是:
SELECT
JobNo,
WorkCenter,
EstimMinutes
FROM Schedule
WHERE WorkCenter = 'Grinding'
现在假设Grinding的每日工作量为500分钟,因此,如果我要给他们今天的时间表,我只想显示工作,直到工作超过500分钟。因此,在这种情况下,我只想返回以绿色突出显示的行,这些行的总估计时间为505。我将如何去做?
我尝试做:
WHERE SUM(EstimMinutes) < 500
但这显然不起作用。不确定是否可以这样做,如果可以,我应该朝哪个方向前进。非常感谢您的帮助
答案 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