我对 SQL 很陌生,我正在尝试生成一个从各种不同的表中提取的报告。将零件与 KEYS 匹配的简单选择行没有问题。尽管当我尝试计算 ITEMID 在某些其他表中出现的次数时遇到了问题。
其中一个表有一个 PARTID 和关于该部分的各种信息。然后另一个表有 PARTID 和 ITEMID(每个部分有多个项目)。然后第三个表有一行 ITEMID,显示列表中每个新的已修复项目。
我希望能够为某个 PARTID 说明相关的 ITEMID 在第三个表中出现了多少次。我有一个代码如下:
SELECT
tblensembleunepiece.ENSPIECEID,
count(tblquarantaine.ITEMID) As 'Quarantine'
FROM tblensembleunepiece, tblitem, tblquarantaine
WHERE
tblensembleunepiece.NOPIECE<>''
and tblensembleunepiece.ENSPIECEID = tblitem.ENSPIECEID
and tblquarantaine.ITEMID = tblitem.ITEMID
GROUP BY tblensembleunepiece.ENSPIECEID;
仅此一项就为我提供了 PARTID 列表以及所有相关 ITEMID 出现在第三个表中的次数。现在,如果我再次使用此代码相同的原则为另一列执行此操作:
SELECT
tblensembleunepiece.ENSPIECEID,
count(tblbonsortieitem.ITEMID)
FROM tblensembleunepiece, tblitem, tblbonsortieitem
WHERE
tblensembleunepiece.ENSPIECEID = tblitem.ENSPIECEID
and tblbonsortieitem.ITEMID = tblitem.ITEMID
and tblbonsortieitem.VAREVENIR = 'true'
GROUP BY tblensembleunepiece.ENSPIECEID;
这也可以单独工作,它计算第三个表中出现的所有与 PARTID 关联的 ITEMID 的行。
当我尝试将它们结合起来时,问题就来了:
SELECT
tblensembleunepiece.ENSPIECEID,
tblensembleunepiece.NOPIECE As 'Part Number',
tblensembleunepiece.DESCRIPTIONENSP As 'Description',
tblensembleunepiece.QTEMIN As 'Min',
tblensembleunepiece.QTEMAX As 'Max',
tbltypepiece.TITRETYPE,
case
when CONSOMMABLE='true' Then 'Consumeable'
else 'Rotable' end As 'Utilization',
sum(tblitem.NBPOURPACK) As 'Serviceable',
count(case when tblquarantaine.BER = 'false' Then tblquarantaine.ITEMID else null end) As 'Quarantine Repairable',
count(case when tblquarantaine.BER = 'true' Then tblquarantaine.ITEMID else null end) As 'Quarantine BER/Scrap',
count(case when tblbonsortieitem.VAREVENIR = 'true' Then tblbonsortieitem.ITEMID else null end) As 'Repair Line'
FROM tblensembleunepiece, tbltypepiece, tblitem, tblquarantaine, tblbonsortieitem
WHERE
tblensembleunepiece.NOPIECE<>''
and tblensembleunepiece.TYPEPIECEID = tbltypepiece.TYPEPIECEID
and tblensembleunepiece.ENSPIECEID = tblitem.ENSPIECEID
and tblquarantaine.ITEMID = tblitem.ITEMID
and tblbonsortieitem.ITEMID = tblitem.ITEMID
GROUP BY tblensembleunepiece.ENSPIECEID;
发生的情况是,由于我的 WHERE 语句,它限制了我现在将看到的 PARTID 数量,因为我施加了太多条件,并且列表不包括我需要查看的所有部分。
如何获得我想要的所有 PARTID,然后将我需要的值填写到其他 2 列中而不强加所有 WHERE 条件?如果它们没有出现在第三个表中,那么该值将简单地为零。