私は SQL にかなり慣れていないので、あらゆる種類の異なるテーブルからプルするレポートを生成しようとしています。パーツを KEYS と一致させる単純な選択行は問題ありません。ITEMID が特定の他のテーブルに表示される回数を数えようとすると、問題が発生しますが。
テーブルの 1 つには、PARTID とそのパーツに関するあらゆる種類の情報があります。次に、別のテーブルに PARTID と ITEMID があります (各パーツに複数の項目があります)。次に、3 番目のテーブルには、リスト内の新しい Repaired アイテムごとに表示される ITEMID の行があります。
特定の PARTID について、関連付けられた ITEMID が 3 番目のテーブルに何回表示されるかを確認できるようにしたいと考えています。次のようなコードがあります。
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 が 3 番目のテーブルに表示される回数がわかります。このコードと同じ原則を持つ別の列に対してこれをもう一度行うと、次のようになります。
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 の 3 番目のテーブルに表示される行をカウントします。
問題は、すべてを組み合わせようとすると発生します。
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 の量が制限されます。条件が多すぎて、表示する必要があるすべてのパーツがリストに含まれていないためです。
すべての WHERE 条件を課すことなく、必要なすべての PARTID を取得し、必要な値を他の 2 つの列に入力するにはどうすればよいですか? 3 番目のテーブルに表示されない場合、値は単純にゼロになります。