- ベストアンサー
ACCESS での LEFT JOIN 時の WHERE 句の使用について
以下のテーブル1、テーブル2で、 テーブル2のDATE2が、テーブル1のDATE以前になっている VOL2を集計したいと考えています。 テーブル1 CODE DATE VOL --------------------------- a 20080601 100 a 20080602 100 a 20080603 100 テーブル2 CODE DATE2 VOL2 ------------------------ a 20080602 50 a 20080603 50 希望する結果のイメージ CODE DATE VOL VOL2 --------------------------------------- a 20080601 100 0 a 20080602 100 50 a 20080603 100 100 以下のSQLを考えましたが、DATE以前のDATE2を持たない場合、 テーブル1の行が表示されませんでした。 SQL文 SELECT t1.CODE, t1.DATE, t1.VOL , Sum(t2.VOL2) AS VOL2の合計 FROM テーブル1 as t LEFT JOIN テーブル2 as t2 ON t1.CODE = t2.CODE WHERE t1.DATE >= t2.DATE2 GROUP BY t1.CODE, t1.DATE, t1.VOL 結果 CODE CDATE VOL VOL2の合計 -------------------------------------- a 20080602 100 50 a 20080603 100 100 SQL文中にある WHERE t1.DATE >= t2.DATE2 が原因しているのではと考えています。 しかし、どのようにしたらよいのかがわかりません。 どなたか、ご教授をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT テーブル1.CODE, テーブル1.DATE, テーブル1.VOL, Sum(IIf([DATE]>=[DATE2],[VOL2],0)) AS VOL2の合計 FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.CODE = テーブル2.CODE GROUP BY テーブル1.CODE, テーブル1.DATE, テーブル1.VOL;
その他の回答 (1)
- keirika
- ベストアンサー率42% (279/658)
SELECT t1.CODE, t1.DATE, t1.VOL , Sum(t2.VOL2) AS VOL2の合計 FROM テーブル1 as t1 LEFT JOIN テーブル2 as t2 ON t1.CODE = t2.CODE AND t1.DATE = t2.DATE2 GROUP BY t1.CODE, t1.DATE, t1.VOL でどうでしょうか
お礼
実行したところ結果が以下のようになり 上手くいきませんでした。 CODE DATE VOL VOL2の合計 ----------------------------------------- a 20080601 100 a 20080602 100 50 a 20080603 100 50 No.2の方の回答にて解決いたしました。 回答ありがとうございました。
お礼
実行したところ、希望通りの結果になりました。 大変助かりました。 ありがとうございました。