こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2008-06-16 17:54:10

QNo.4105459

暇なときに回答ください

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

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;

投稿日時 - 2008-06-17 00:21:16

お礼

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

投稿日時 - 2008-06-17 18:56:08

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

でどうでしょうか

投稿日時 - 2008-06-16 22:02:35

お礼

実行したところ結果が以下のようになり
上手くいきませんでした。

CODE   DATE   VOL   VOL2の合計
-----------------------------------------
a    20080601  100
a    20080602  100  50
a    20080603  100  50


No.2の方の回答にて解決いたしました。
回答ありがとうございました。

投稿日時 - 2008-06-17 18:55:03

あなたにオススメの質問