• ベストアンサー

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 が原因しているのではと考えています。 しかし、どのようにしたらよいのかがわかりません。 どなたか、ご教授をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.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;

tokonoko
質問者

お礼

実行したところ、希望通りの結果になりました。 大変助かりました。 ありがとうございました。

その他の回答 (1)

  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

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 でどうでしょうか

tokonoko
質問者

お礼

実行したところ結果が以下のようになり 上手くいきませんでした。 CODE   DATE   VOL   VOL2の合計 ----------------------------------------- a    20080601  100 a    20080602  100  50 a    20080603  100  50 No.2の方の回答にて解決いたしました。 回答ありがとうございました。

関連するQ&A