0

購入用の AORDER と販売用の BORDER の 2 つのテーブルがあります。保留中の数量を取得したい。販売注文は、1 つの購入注文に対して複数のレコードを持つことができます。保留中の数量が0の注文を表示したくありません。これを試しました:

SELECT ;
      aorder.orderid,;
      aorder.orderdate,;
      aorder.itemname,;
      aorder.partyname,;
      aorder.qty as Purchase,;
      SUM(border.qty) AS Sale,;
      SUM(aorder.qty-border.qty) as Pending;
   FROM ;
      aorder;
         LEFT JOIN border ;
            ON aorder.orderid = border.porderid;
   GROUP BY ;
      aorder.orderid,;
      aorder.orderdate,;
      aorder.itemname,;
      aorder.partyname,;
      aorder.qty

しかし、購入数量=販売数量のレコードを非表示にできませんでした。

事前にt​​hnx。

4

1 に答える 1

0

Shahkalpesh が述べたように、having を適用する必要がありますが、SUM は正しくありません。

そのはず

aorder.qty - SUM(border.qty) > 0; && もフィールド参照用です。

その理由は、SUM は合計内の各部分を合計することです。「購入」レコードは 1 つだけですが、「販売」レコードは多く、在庫管理の先入れ先出し (FIFO)、後入れ / 先出し (LIFO) などのようになります。

したがって、数量 10 の PURCHASE 注文 #1 があり、数量 2、1、1、3、2、1 の別々の時間で販売したとします。合計 6 つの販売レコードがあります。あなたがしていることは

sum( 10 - 2 
   + 10 - 1
   + 10 - 1
   + 10 - 3
   + 10 - 2
   + 10 - 1 )

改造方法は…

10 - SUM( 2 + 1 + 1 + 3 + 2 + 1 )
于 2013-03-11T11:40:46.767 に答える