Sql 满足值时排除行
我需要过滤我的结果,这样我只有Sql 满足值时排除行,sql,Sql,我需要过滤我的结果,这样我只有JOBSTATUS为'WAITING'或'STARTED'的生产订单。我不想要任何其他类型的工作状态。因此,例如,如果生产订单有一个作业状态为“已结束”的作业,我想从结果中排除该生产订单 PT.PRODID (Production Order) PT.JOBNUM (JOB NUMBER) PRJ.JOBID (Job Identification) PRJ.JOBSTATUS (Job Status) Status: 0 - Coming 1 - Waiti
JOBSTATUS
为'WAITING'或'STARTED'的生产订单。我不想要任何其他类型的工作状态。因此,例如,如果生产订单有一个作业状态为“已结束”的作业,我想从结果中排除该生产订单
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
正如我提到的,我有我需要的所有数据,但我不知道如何进一步过滤它
我的尝试只是过滤掉已结束的作业状态。我想排除任何作业状态为“已结束”的生产订单
所以我的结果应该是这样的:
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)-结束或(1)-即将开始的作业状态PRJ.JOBID
。如果作业状态具有这些状态之一,则从结果中排除生产编号和所有作业状态行 您的问题不清楚您的最终查询应该是什么样的,但是可以使用HAVING
子句根据聚合进行筛选:
SELECT JOBID
FROM Projects
GROUP BY JOBID
HAVING MAX(Status) < 4
您已经标记了3个不同的数据库,您实际使用的是哪一个?您还可以添加到目前为止的查询吗?
select。。。。。其中PRJ.JOBSTATUS“结束”
我建议在尝试使用sql之前先学习sql的基础知识。为此,我听到了这本书的好消息,在十分钟内自学SQL。Hart CO,我尝试了HAVING命令,但它过滤掉了任何状态为4的内容。部分正确。如果有任何状态为4,则我希望从结果中删除所有行(无论状态如何)和生产订单。
SELECT JOBID
FROM Projects
GROUP BY JOBID
HAVING MAX(CASE WHEN Status = 'Ended' THEN 1 ELSE 0 END) = 0