Microsoft Access 掲示板

サブクエリの書き方について / 1

7 コメント
views
4 フォロー
1
hiroton 2022/05/09 (月) 09:38:04 修正 41ab0@f966d

質問内の「Q_本指名カウント」が間違っている(コピペミス?)のでどこをどうすればとは言えませんが、基本的に後のクエリで呼び出している部分をそっくりそのまま置き換えればうまくいくと思います。置き換えた部分はSQL終了文字(;)を削除して、括弧(())で括ります

ex)
LEFT JOIN Q_バック代金 ON

LEFT JOIN (SELECT Q_売上合計.伝票ID,~(略)~) ON

また、自己結合をする場合、適宜エイリアスを使用し、その他、(サブクエリ関係なく)一般的なクエリの記述として、複雑なクエリになる場合には適切な括弧の運用が必要になります
具体的にはINNER JOINを連続させる場合、1回であれば必要のない括弧が必要になったりします。

あと、単純に必要な計算の見極めが必要ですね

SELECT
  T1.伝票ID
  ,T1.テーブル番号
  ,T1.日時
  ,T1.指名
  ,T1.名前
  ,T1.ドリンク
  ,T1.ドリンク代金
  ,IIf(T1.指名 = "本指名", T2.テーブル代金 / T3.本指名カウント) AS バック代金
FROM
  (
    MT_売上 AS T1
    INNER JOIN
      (
        SELECT
          伝票ID
          ,テーブル番号
          ,日時
          ,sum(ドリンク代金) AS テーブル代金
        FROM
          MT_売上
        GROUP BY
          伝票ID
          ,テーブル番号
          ,日時
      ) AS T2
    ON
      T1.伝票ID = T2.伝票ID
      AND T1.テーブル番号 = T2.テーブル番号
      AND T1.日時 = T2.日時
  )
  INNER JOIN
    (
      SELECT
        伝票ID
        ,テーブル番号
        ,日時
        ,count(*) AS 本指名カウント
      FROM
        MT_売上
      WHERE
        指名 = "本指名"
      GROUP BY
        伝票ID
        ,テーブル番号
        ,日時
    ) AS T3
  ON
    T1.伝票ID = T3.伝票ID
    AND T1.テーブル番号 = T3.テーブル番号
    AND T1.日時 = T3.日時
;

MT_売上の構造自体が若干怪しいですが、そちらは無視して回答しています

通報 ...