sql - 为每个合同选择具有合同要求的所有代码的供应商
问题描述
我有一个包含“要求代码”(COXA)的合同表和一个包含“批准代码”(VNDAPP)的供应商表。合同可以有任意数量的要求,供应商可以有任意数量的批准。
示例数据:
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
在另一个问题中,当我在查询中指定合同编号时,我收到了有效的回复:
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
)
问题是我需要为每个合同号找到匹配的供应商。
提前致谢!
解决方案
您可以使用 CROSS JOIN 生成(合同、供应商、合同要求)的元组,然后使用 LEFT JOIN 将合同要求与供应商批准相匹配:
SELECT
contract_requirement.contr,
suppliers.vndno,
COUNT(contract_requirement.reqmt) AS req_count,
COUNT(supplier_approval.reqmt) AS app_count
FROM contract_requirement
CROSS JOIN (
SELECT DISTINCT vndno
FROM supplier_approval
) AS suppliers
LEFT JOIN supplier_approval ON suppliers.vndno = supplier_approval.vndno AND contract_requirement.reqmt = supplier_approval.reqmt
GROUP BY contract_requirement.contr, suppliers.vndno
HAVING COUNT(contract_requirement.reqmt) = COUNT(supplier_approval.reqmt)
推荐阅读
- c++ - C ++:用另一个字母递归替换字符串中字母的所有实例
- mongodb - 未安装 Mongo 客户端时使用 BASH 脚本编辑 Mongo 数据库
- python - FCFS,python 3 我的代码有什么问题?
- c# - 当存在多个值时,JSON.Net SelectTokens 不返回 Jtokens
- kubernetes - 使用新图像标签运行“kubectl apply”时的孤立副本集
- javascript - RangeError:array.push(...) 超出了最大调用堆栈大小
- python - 如何在不刷新整个模板的情况下更新烧瓶中的个人资料图片
- c - 将字节数组指针转换为 int 数组指针
- scala - 匹配有状态子类对象时,我可以避免在模式匹配中使用 asInstanceOf 吗?
- google-apps-script - 谷歌表格脚本不会为主题获得价值