where子句限制完全匹配的行,显示部分匹配的行

Where clause to restrict rows which are fully matched, show rows which are partially matched

我有以下 SQL 查询:

    SELECT 
        job.EngineeringJobNumber, 
        CASE 
           WHEN line.PMVoucherNumber IS NULL THEN 0 
                                             ELSE 1 
        END AS JobLinesMatched
    FROM 
        Request_HDR hdr
    JOIN 
        Request_LINE line ON hdr.RequestId = line.RequestId
    JOIN 
        EngineeringJob job ON hdr.EngineeringJobId = job.EngineeringJobId
    JOIN 
        GL00105 gl ON line.AccountIndex = gl.ACTINDX
    WHERE 
        line.VendorID = 'Vendor' AND job.ApprovalStatus = 5

哪个returns这个:

EngineeringJobNumber JobLinesMatched
JOB00023 0
JOB00023 0
JOB00023 1
JOB00023 0
JOB00023 0
JOB00011 1
JOB00011 1
JOB00011 1
JOB00011 1
JOB00011 1

我想要实现的是限制工作行完全匹配的行,即该工作的所有行都是 1。

编辑:我仍然需要能够查看未完全匹配的作业的所有行,即 JOB0023 的所有 5 行。

我想我可能需要一个 HAVING 子句?任何帮助表示赞赏。

您可以按如下方式使用analytical function

select EngineeringJobNumber, JobLinesMatched from
(SELECT job.EngineeringJobNumber,
        CASE WHEN line.PMVoucherNumber IS NULL THEN 0 ELSE 1 END AS JobLinesMatched
        count(CASE WHEN line.PMVoucherNumber is NULL then 0 END) 
            over (partition by job.EngineeringJobNumber) as sm
    FROM Request_HDR hdr
    JOIN Request_LINE line ON hdr.RequestId = line.RequestId
    JOIN EngineeringJob job ON hdr.EngineeringJobId = job.EngineeringJobId
    JOIN GL00105 gl ON line.AccountIndex = gl.ACTINDX
    WHERE line.VendorID = 'Vendor' AND job.ApprovalStatus = 5) t
 WHERE sm > 0