このトピックに関する最後の質問 (希望)。
私がする必要があるのは、2 つの異なるテーブルのフィールドを合計し、それらを合計して、この合計が顧客の与信限度額を超えているかどうかを確認することです。
全体的な解決策を考え出すことができるように、問題を小さなタスクに分割しました。(これらの小さなコードは私にとっては正しく機能しますが、コードの 3 番目の部分で組み合わせると、合計が正しくありません)。最初に、次のように最初の合計フィールドを計算しました。
--summmed open invoices
SELECT company, sum(unit_price * invoice_qty) as open_invoices
FROM
(SELECT arc.company, ard.unit_price, ard.invoice_qty, arc.credit_limit
FROM iqms.arprepost_detail ard, iqms.arprepost arp, iqms.arcusto arc
WHERE ard.arprepost_id = arp.ID
AND arp.arcusto_id = arc.ID)
GROUP BY company
ORDER BY company;
この数値は、合計すると正しく出てきます。手動で確認しました。次に、必要な他のフィールドを次のように合計しました。
--summed open orders
SELECT company, (sum (unit_price * total_qty_ord)) as total_open_orders
FROM
(SELECT arc.company, od.unit_price, od.total_qty_ord, arc.credit_limit
FROM iqms.arcusto arc, iqms.orders o, iqms.ord_detail od
WHERE od.orders_id = o.ID
AND o.arcusto_id = arc.ID
AND (od.cumm_shipped < od.total_qty_ord OR od.cumm_shipped IS NULL))
GROUP BY company
ORDER BY company;
繰り返しますが、これらの数字は手動検査で正しく出てきています。
ここで必要なのは、これら 2 つの計算を合計して、その数値がその顧客の「credit_limit」フィールドより大きいかどうかを確認することです。私はこのためのコードを書きましたが、数字は本来あるべきものをはるかに超えています (このコードは以下に示されています)。
--summmed open invoices + open orders
SELECT company, credit_limit,
round(sum(i_up * invoice_qty)) AS total_invoices,
round(sum (o_up * total_qty_ord)) AS total_orders,
round(sum(i_up * invoice_qty) + sum (o_up * total_qty_ord)) as overall_total
FROM
(SELECT arc.company, arc.credit_limit, ard.unit_price as i_up, ard.invoice_qty, od.unit_price as o_up, od.total_qty_ord
FROM iqms.arprepost_detail ard, iqms.arprepost arp, iqms.arcusto arc, iqms.orders o, iqms.ord_detail od
WHERE
ard.arprepost_id = arp.ID
AND arp.arcusto_id = arc.ID
AND od.orders_id = o.ID
AND o.arcusto_id = arc.ID
AND (od.cumm_shipped < od.total_qty_ord OR od.cumm_shipped IS NULL)
)
GROUP BY company, credit_limit
HAVING ((sum(i_up * invoice_qty)) + (sum (o_up * total_qty_ord)) > credit_limit)
ORDER BY company;
どこが間違っているのかわかりません。単純な修正かもしれませんし、私のロジックに問題があるかもしれません。どんな洞察も大歓迎です。いつもご愛顧いただき誠にありがとうございます。