1

私は 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 番目のテーブルに表示されない場合、値は単純にゼロになります。

4

1 に答える 1