0

これらのステートメントをすべて 1 つのクエリで実行しようとしているSELECTので、それをさらに進めてグループ化できます。JOINTABLE1でそれを伝えなければならないと思います。というフィールドで JOIN する必要があると言えますITEMWHEREサブクエリに2つのステートメントがあるため、何十ものJOINステートメントを試しましたが、どれもうまくいきません。

SELECT ITEM, DSI, LEADTIME,
(SELECT COUNT(ORDER_NUMBER) FROM SUBTABLE1 TR1 WHERE TRANS_DATE BETWEEN DATE_SUB(curdate(), INTERVAL 730 DAY) AND DATE_SUB(curdate(), INTERVAL 365 DAY))
as OLDORDERS,
(SELECT COUNT(ORDER_NUMBER) FROM SUBTABLE2 TR2 WHERE TRANS_DATE BETWEEN DATE_SUB(curdate(), INTERVAL 364 DAY) AND curdate())
as NEWORDERS
FROM TABLE1

表示:

ITEM   |  DSI  |  LEADTIME  | OLDORDERS | NEWORDERS
PROD-1    0         1          16036      38399
PROD-2    1         0          16036      38399
PROD-3    1         1          16036      38399

繰り返しますが...サブクエリJOINのフィールドITEMにそれが必要だと思いますが、これを行う方法がわかりません。アイデアはありますか?

4

1 に答える 1

4

JOIN実際には、それ自体は必要ありません。むしろ、サブクエリを「相関」させて、サブクエリが含まれているクエリのデータを参照するようにする必要があります。

あなたはあなたの正確なテーブル定義を与えていないので、私は確かに言うことはできませんが、あなたが必要とするものについての私の推測はここにあります:

SELECT item, dsi, leadtime,
       ( SELECT COUNT(order_number)
           FROM subtable1
          WHERE trans_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 730 DAY)
                               AND DATE_SUB(CURDATE(), INTERVAL 365 DAY)
                -- restrict to "current" record from TABLE1:
            AND subtable1.item = table1.item
       ) as OLDORDERS,
       ( SELECT COUNT(order_number)
           FROM subtable1
          WHERE trans_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 364 DAY)
                               AND CURDATE()
                -- restrict to "current" record from table1:
            AND subtable1.item = table1.item
       ) as NEWORDERS
  FROM table1
;

table1.itemこれは、それが主キーであり、それsubtable1.itemを参照する外部キーであると想定しています。そうでない場合は、当然、クエリを調整する必要があります。

于 2012-10-09T19:22:43.753 に答える