我需要过滤我的结果,以便我只有JOBSTATUS
正在等待的生产订单。或者' STARTED'。我不想要任何其他类型的工作状态。因此,例如,如果生产订单的作业状态为ENDED,我想从结果中排除该生产订单。
PT.PRODID (Production Order)
PT.JOBNUM (JOB NUMBER)
PRJ.JOBID (Job Identification)
PRJ.JOBSTATUS (Job Status)
Status:
0 - Coming
1 - Waiting
2 - Started
4 - Ended
正如我所提到的,我拥有所需的所有数据,但我不知道如何进一步过滤它。
我的尝试只是过滤掉已经ENDED的工作状态。我想要排除任何作业状态为ENDED的生产订单。
所以我的结果应该是这样的:
PT.PRODID PT.Jobnum PRJ.JOBID PRJ.JOBSTATUS
ABC 10 9876 WAITING
ABC 20 5432 STARTED
ABC 30 1098 WAITING
ABC 40 7654 WAITING
ABC 50 3210 STARTED
这是我到目前为止的代码:
SELECT
PRJ.PRODID 'Prod #'
,PRJ.OprNum 'Oper #'
,PRJ.JOBID 'Job #'
,PRJ.WRKCTRID 'Resource'
-- Assign JOBSTATUS int to String value
,(Case PRJ.JOBSTATUS
WHEN '1' THEN 'Waiting'
WHEN '2' THEN 'Coming'
WHEN '3' THEN 'Started'
WHEN '4' THEN 'Ended'
Else 'No Data'
END) 'JobStatus'
,PRJ.FROMDATE
FROM
PRODROUTEJOB AS PRJ
JOIN PRODTABLE AS PT ON PRJ.PRODID = PT.PRODID
WHERE PT.PRODSTATUS = '4'--Show only Production orders that are STARTED
AND PRJ.JOBTYPE = '2' -- Filter only for jobs that are PROCESS and not QUEUE BEFORE
我需要的结果是生产订单PT.PRODID
,其不具有(4)-ENDED或(1)-COMING的作业状态PRJ.JOBID
。如果作业状态具有这些状态之一,则从结果中排除生产编号和所有作业状态行。
答案 0 :(得分:0)
从您的问题中不清楚您的最终查询应该是什么样子,但可以使用HAVING
子句根据聚合进行过滤:
SELECT JOBID
FROM Projects
GROUP BY JOBID
HAVING MAX(Status) < 4
我假设每个作业有多行,具有不同的状态值,因此聚合将允许您过滤到跨行的特定状态永远不会出现的作业。
如果Status
实际上不是4
而是Ended
,那么您可以在HAVING
子句中使用条件聚合:
SELECT JOBID
FROM Projects
GROUP BY JOBID
HAVING MAX(CASE WHEN Status = 'Ended' THEN 1 ELSE 0 END) = 0