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
我有以下 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