选择至少具有与合同所需的批准代码相同的供应商



有一个具有'批准代码'(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),其中approvalidrequirementid对应。然后,您可以使用以下查询

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'
                  );

也就是说,计算供应商对合同要求的要求。然后,检查总数是否与合同的总数匹配。

这是假设您在两边都没有重复的要求。

最新更新