0

私は3つのテーブルを持っています。テーブル A には、コードと項目の 2 つのフィールドがあります。テーブル B には、qty_recd と recd_dt の 3 つのフィールド code があります。テーブル C には、Code、qty_sold、sold_dt の 3 つのフィールドがあります。この方法で結果を取得したい:

テーブル A の各レコードについて、テーブル B の qty_recd の合計とテーブル C の qty_sold の合計。

TABLE-A

code      Item
-----     ------
A1       AMMONIA SOLUTION


TABLE-B

code     qty_recd       recd_dt
-----    --------       -------
A1         5            2013-06-01
A1         8            2013-04-18
A1         3            2013-05-22


TABLE-C

code     qty_sold       sold_dt
-----    --------       -------
A1         1            2013-08-10
A1         4            2013-09-01
A1         2            2013-05-11

こんな結果が欲しい

code      item            tot_recd       tot_sold
-----    --------         -------       --------
A1     AMMONIA SOLUTION     16             6

いくつかの構成を試しましたが、目的の出力が得られませんでした。SELECTステートメントの作成を手伝ってください

4

1 に答える 1

5

マスター商品リストを 2 つのサマリーに結合したいと考えています。(通常、テーブル名にハイフンを使用しないでください!)

要約の1つは次のとおりです。

   SELECT code, SUM(qty_recd) AS qty_recd
     FROM `TABLE-B`
    GROUP BY code

あなたは他のことを推測することができます。

全体的なクエリは

   SELECT a.code, a.item, b.qty_recd, c.qty_sold
     FROM `TABLE-A` AS a
     LEFT JOIN (
         SELECT code, SUM(qty_recd) AS qty_recd
           FROM `TABLE-B`
          GROUP BY code
     ) AS b ON a.code = b.code
     LEFT JOIN (
         SELECT code, SUM(qty_sold) AS qty_sold
           FROM `TABLE-C`
          GROUP BY code
     ) AS c ON a.code = c.code

これは、それを示す SQL Fiddle です。 http://sqlfiddle.com/#!2/f6cb7/1/0

単純に 3 つのテーブルすべてを JOIN してから、GROUP BY を使用することもできます。しかし、この厄介なクロス積の派生テーブルを要約することになります。

CODE      qty_recd    qty_sold
A1         5              1
A1         5              4
A1         5              2
A1         8              1
A1         8              4
A1         8              2
A1         3              1
A1         3              4
A1         3              2

たとえば、この不適切なクエリはそれを行います。

      SELECT a.code, a.item, SUM(b.qty_recd), SUM(c.qty_sold) //WRONG!
        FROM `TABLE-A` AS a
   LEFT JOIN `TABLE-B` AS b ON a.code = b.code
   LEFT JOIN `TABLE-C` AS C ON a.code = c.code
    GROUP BY a.code, a.item 

このフィドルを参照してください。 http://sqlfiddle.com/#!2/f6cb7/3/0

それはあなたが望むものではありません。したがって、要約サブクエリが必要です。

于 2013-09-07T13:07:41.997 に答える