有一个具有'批准代码'(VNDAPP)和具有'要求代码'(COXA)的合同表的供应商表。合同可以有任何数量的要求,供应商可以拥有任何数量的批准。
VNDAPP: (vendor approvals table)
VNUM (vendor number)
REQMT (approval code)
COXA: (contract requirements table)
CONTR (contract number)
REQMT (requirement)
需要找到所有具有批准的供应商,至少要满足特定合同的要求。
示例合同7736的要求数字1和10。有27个供应商最低的供应商。由于需求是可变的,因此我无法将它们编码为查询。我不确定这有资格成为关系部门问题...
SELECT VNDNO
FROM VNDAPP
LEFT JOIN COXA ON VNDAPP.REQMT = COXA.REQMT
GROUP BY VNDAPP.VNDNO
HAVING Count(COXA.REQMT) = (SELECT count(*)
FROM COXA WHERE COXA.CONTR = '7736'
GROUP BY COXA.CONTR)
我在做什么错?
预先感谢!
示例数据:
Contract Requirement (COXA):
CONTR REQMT
7736 1
7736 10
7737 1
7737 4
7737 6
7738 5
7739 1
Supplier Approval (VNDAPP):
VNDNO REQMT
10019 1
10020 1
10020 2
10020 10
10021 1
10021 4
10021 5
10021 6
Desired result:
CONTR VNDNO
7736 10020
7737 10021
7738 10021
7739 10019
7739 10020
7739 10021
假设您有两个绑定表supplier_approval(supplierid, approvalid)
和contracts_requirement(contractid, requirementid)
,其中approvalid
和requirementid
对应。然后,您可以使用以下查询
select sa.supplierid
from supplier_approval sa
where sa.approvalid IN (
select cr.requirementid
from contracts_requirement cr
where cr.contractid = 7736
)
group by sa.supplierid
having count(distinct sa.approvalid) = (
select count(*)
from contracts_requirement cr
where cr.contractid = 7736
)
我想你只想要:
SELECT VNDNO
FROM VNDAPP JOIN
COXA
ON VNDAPP.REQMT = COXA.REQMT
WHERE COXA.CONTR = '7736'
GROUP BY VNDAPP.VNDNO
HAVING Count(*) = (SELECT count(*)
FROM COXA
WHERE COXA.CONTR = '7736'
);
也就是说,计算供应商对合同要求的要求。然后,检查总数是否与合同的总数匹配。
这是假设您在两边都没有重复的要求。