Sql 选择至少具有与合同要求相同的批准代码的供应商
有一个有“批准代码”(VNDAPP)的供应商表和一个有“要求代码”(COXA)的合同表。合同可以有任意数量的要求,供应商可以有任意数量的批准Sql 选择至少具有与合同要求相同的批准代码的供应商,sql,db2,relational-division,Sql,Db2,Relational Division,有一个有“批准代码”(VNDAPP)的供应商表和一个有“要求代码”(COXA)的合同表。合同可以有任意数量的要求,供应商可以有任意数量的批准 VNDAPP: (vendor approvals table) VNUM (vendor number) REQMT (approval code) COXA: (contract requirements table) CONTR (contract number) REQMT (requirement) 需要找到所有获得至少
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\u approval(supplierid,approvalid)
和contracts\u requirement(contracid,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'
);
也就是说,计算与合同要求相匹配的供应商要求。然后,检查总数是否与合同的总数匹配
这假设您在任何一方都没有重复的需求。至少向我们显示表架构和一些示例数据。1到10号存储在哪里?要求在哪里?批准在哪里?哪个表是哪个?他们有哪些栏目?编辑以显示髋关节和VNDaptHanks的描述,Radim-only缺少一个供应商。我来帮你。丢失的供应商有什么有趣的地方?奇怪的是,原始查询确实返回了它们。我的错误…我在手动计算批准时出错了。Radim,你的解决方案是正确的。非常感谢,@Radim!这是一个额外的步骤,如果我需要显示所有符合每个合同最低要求的供应商,我需要做什么修改?我如何加入合同需求表?