Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 满足值时排除行_Sql - Fatal编程技术网

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