Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2016)
複数条件の結合
投稿日時: 18/10/25 19:58:54
投稿者: 阮氏洪

お世話になります。
一つのテーブルに以下の様な、テーブルがあるとします。
 
 NB CD namae kazu jikan hiduke
  1 001 みかん  50 9:15 20181014
  2 002 りんご  100 9:30 20181014
  3 003 もも 60 9:45 20181015
  4 001 みかん 8 10:00 20181015
  5 002 りんご 10 10:10 20181015
  6 003 もも 5 10:15 20181015
 
kazuの値を合計した結果を時間の早い順のレコードで表示したいのです。
 
 NB CD namae kazu jikan hiduke
  1 001 みかん  58 9:15 20181014
  2 002 りんご  110 9:30 20181014
  3 003 もも  65 9:45 20181015
内部結合でNBの若い方を取り出して、LEFT JOIN で合計値を計算させたいのですが、エラーになります
 
SELECT T1.NB, T1.CD, T1.NAME, T1.JIKAN, T1.HIDUKE,T3.Z1
FROM TABLE1 AS T1 INNER JOIN (SELECT MIN(NB) AS F1, CD AS F2
FROM TABLE1 GROUP BY CD) AS T2 ON T1.CD = T2.F2 AND T1.NB = T2.F1
LEFT JOIN (SELECT SUM(KAZU) AS Z1, CD AS F12, NB AS F11
FROM TABLE1 GROUP BY CD, NB) AS T3
ORDER BY T1.NB;
 
INNER JOIN はうまくいくのですが、3つ目のLEFT JOIN をの所を追加すると、エラーになります。
3つを結合させる時の方法に問題があるようなきがしています。
DISTINCT を使う方法もあるのかもとも思いますが、3つも繋げるとどうしたらいいのか、わからなくなっております。
 
表が崩れて見にくくなって申し訳ございません。
どなたかご教授お願いします。
 
PS.実際はエクセルのVBAでやっています。アクセスのデータをエクセルに取り出そうとやっております。

回答
投稿日時: 18/10/25 22:46:10
投稿者: よろずや

Access特有の方言で、
3つのテーブルを結合するときは、
FROM (T1 と T2 の結合) LEFT JOIN T3 ON ...
のようにカッコでくくる必要があります。
 
でも、この場合は3つも繋げる必要はありません。
 
SELECT T1.NB, T1.CD, T1.namae, T2.kazu, T1.jikan, T1.hiduke
FROM TABLE1 AS T1 INNER JOIN (SELECT MIN(NB) AS F1, CD AS F2, SUM(TABLE1.kazu) AS kazu
FROM TABLE1 GROUP BY CD) AS T2 ON (T1.NB = T2.F1) AND (T1.CD = T2.F2)
ORDER BY T1.NB;

投稿日時: 18/10/26 16:44:48
投稿者: 阮氏洪

よろずやさんのとおりにすると解決できました。大変助かりました。:D
 
合計のところのSUM(TABLE1.kazu) ですが、テーブル名を付けるのがポイントですか?
3テーブルの括弧のつけ方も検討してみたのですが、わからず終いになってしまいました。
 
ありがとうございました。