0

製品グループごとに分類された注文値を合計するクエリを作成しています-問題は、結合を追加すると、集計されたSUMが大幅に膨らむことです-重複した行を追加するためだと思います。SQLは初めてですが、サブセレクトまたはネストされた結合でクエリを作成する必要があるためだと思いますか?

すべてのデータが期待どおりに返され、結合によって必要なデータが抽出されますが、返される SUM(inv.item_total) AS 値は本来あるべき値よりもはるかに高くなります - 以下の SQL

SELECT  so.Company_id, SUM(inv.item_total) AS Value, co.company_name,
agents.short_desc, stock_type.short_desc AS Type


FROM SORDER as so

JOIN company AS co ON co.company_id = so.company_id
JOIN invoice AS inv ON inv.Sorder_id = so.Sorder_id
JOIN sorder_item AS soitem ON soitem.sorder_id = so.Sorder_id
JOIN STOCK AS stock ON stock.stock_id = soitem.stock_id
JOIN stock_type AS stock_type ON stock_type.stype_id = stock.stype_id
JOIN AGENTS AS AGENTS ON agents.agent_id = co.agent_id

WHERE
 co.last_ordered >'01-JAN-2012' and so.Sotype_id='1'


GROUP BY so.Company_id,co.company_name,agents.short_desc, stock_type.short_desc

「重複していない」SUM(inv.item_total) AS 値を引き出すためにこのクエリをどのように構成する必要があるかについてのガイダンスは大歓迎です。

4

2 に答える 2

0

正確な合計を得るには、必要な結合のみが必要です。したがって、このバージョンは動作するはずです:

SELECT so.Company_id, SUM(inv.item_total) AS Value, co.company_name
FROM SORDER so JOIN
     company co
     ON co.company_id = so.company_id JOIN
     invoice inv
     ON inv.Sorder_id = so.Sorder_id
group by so.Company_id, co.company_name

その後、一度に 1 つの結合を追加して、乗算が行われている場所を確認できます。エージェントの関係だと思います。

于 2012-08-14T18:33:35.440 に答える
-1

結合が正確ではないようです。

最初の容疑者参加

たとえば、エージェントはper ですかcompany、それとも perinvoiceですか?

注文ごとの場合、結合は次のようにする必要があります

JOIN AGENTS AS AGENTS ON agents.agent_id = inv.agent_id

第二容疑者加入

多くの を同時にorder持つことはできますか? それも問題を引き起こす可能性があります。注文に 3 つのアイテムがあり、3 つの請求書が送信されたとします。結合によると、同じ項目が 3 回表示されます。これは、3 つしかないはずの項目が合計 9 つあることを意味します。テーブルを削除する必要がある場合があります。itemsinvoicesinvoices

これを自分で解決する可能な方法:

すべてのグループ化と合計を削除し、1 つの請求書でフィルター処理して、すべてのデータに対して一意の行セットを生成できるかどうかを確認します。

項目が 1 つだけの請求書から始めて、結果セットの正確性を調べます。それが機能する場合は、複数の別の請求書を追加し、行をチェックして、完全なデータセットが返されるかどうかを確認します。そうでない場合は、値が繰り返される列 (会社名、アイテム名、エージェント名など) は通常、重複が表示される理由を調べるための出発点として適しています。

于 2012-08-14T18:29:43.720 に答える