わかる方ご教授おねがいします。
1 SQL = ""
2 SQL = SQL & "select"
3 SQL = SQL & " 伝票データ.相手先コード"
4 SQL = SQL & ",伝票データ.相手先名"
14 SQL = SQL & ",担当コースマスタ.担当者"
15 SQL = SQL & " from (select * from 伝票データ"
16 SQL = SQL & " left join"
17 SQL = SQL & " (select 担当者,コード from 担当コースデータ"
18 SQL = SQL & " where コード in"
19 SQL = SQL & " (select コード"
20 SQL = SQL & " from 担当コースデータ"
21 SQL = SQL & " where 削除=No"
22 SQL = SQL & " and メイン=Yes"
23 SQL = SQL & " group by コード having count(*)=1)"
24 SQL = SQL & " as 担当コースデータ)"
25 SQL = SQL & " on 伝票データ.相手先コード=担当コースデータ.コード) as 伝票データ"
DBMSも発生しているエラーも解りませんが、
全体のfrom句の対象テーブルはサブクエリとなっていますが、25行目で名称を「伝票データ」としています。
14行目で「担当コースマスタ.担当者」としていますが、担当コースマスタが無いのでエラーになっているのでは?
この場合、
「担当コースマスタ.担当者」
ではなく、
「伝票データ.担当者」
となるような気がしますがいかがでしょうか。
その通りにやったところ解決しました。ありがとうございます!
Excel という言葉と変数名や式の形式などからAccessVBAだと推測してお応えしますがよろしいでしょうか。
まずは26 行目に
Debug.Print SQL
といれて動かしてイミディエイトウィンドウ(Ctrl+Gで出てきます)に変数の内容を出力。
出力されたものは長い一行になっているのでメモ帳にコピー&ペーストして手作業で段差(インデントと言います)をつけたものが下記になります。
select 伝票データ.相手先コード,伝票データ.相手先名,担当コースマスタ.担当者 from ( select * from 伝票データ left join (select 担当者,コード from 担当コースデータ where コード in (select コード from 担当コースデータ where 削除=No and メイン=Yes group by コード having count(*)=1 ) as 担当コースデータ ) on 伝票データ.相手先コード=担当コースデータ.コード ) as 伝票データ
動作環境も、どのようなエラーが出ているのかもわかりませんので、とりあえず気になった点だけに修正してみました。
(SQL予約語は慣例的に大文字なので変えてあります)
SELECT 伝票データ.相手先コード,伝票データ.相手先名,伝票データ.担当者 FROM ( SELECT 伝票データ.*,担当コースデータ.担当者 FROM 伝票データ LEFT JOIN (SELECT 担当者,コード FROM 担当コースデータ WHERE コード IN (SELECT コード FROM 担当コースデータ WHERE 削除='No' AND メイン='Yes' GROUP BY コード HAVING count(*) = 1 ) ) ON 担当コースデータ.コード = 伝票データ.相手先コード ) AS 伝票データ
最後になりましたが、ご質問の際には使っているプログラム言語は書いておきましょう。
文章から推測することはある程度可能ですが、
同じプログラム言語であったとしてもバージョンが違えば違う事もありますので、お互いに2度手間3度手間になります。
そうですね。言語とそのバージョンとエラーメッセージは残すべきでしたね。実は最初はそれらを記してたんですが500字以内に質問を抑えないとアップされないのでそれらの情報を省いてしまったんですよ。今思えばsql = sql & みたいな書き方を改めるべきでしたね。今回のsql文の件については解決しました。ホントにありがとうございます。
エラーメッセージはfrom文以下が構文エラーです。ちなみに24行目の後ろにasはいりませんでしたが、24行目のカッコの位置を一番後ろじゃなくて先頭にもっていく必要がありました。ご指摘ありがとうございます。