人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のSQLが通りません。(行番号が飛んでいるのはコメントアウトしています)17行目から24行目のサブクエリは、それ単独では動きます。<メイン=Yes>というのは一つの相手先に対して複数の担当者が存在する場合、メインとなる担当者をこの処理上作らなければいけないため存在しています。(最終的に担当者別の粗利を計算してエクセルに吐き出すため
わかる方ご教授おねがいします。

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 伝票データ"

●質問者: uuuu_mmmm0120
●カテゴリ:コンピュータ
✍キーワード:23 24 as GROUP ON
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●10ポイント

エラーメッセージぐらいは書いてほしいのと、SQL のみ提示の方が見やすいと思うのだけど。


24行目のかっこの後ろに「AS」がいりませんか?

◎質問者からの返答

エラーメッセージはfrom文以下が構文エラーです。ちなみに24行目の後ろにasはいりませんでしたが、24行目のカッコの位置を一番後ろじゃなくて先頭にもっていく必要がありました。ご指摘ありがとうございます。


2 ● sect
●50ポイント

DBMSも発生しているエラーも解りませんが、

全体のfrom句の対象テーブルはサブクエリとなっていますが、25行目で名称を「伝票データ」としています。

14行目で「担当コースマスタ.担当者」としていますが、担当コースマスタが無いのでエラーになっているのでは?

この場合、

「担当コースマスタ.担当者」

ではなく、

「伝票データ.担当者」

となるような気がしますがいかがでしょうか。

◎質問者からの返答

その通りにやったところ解決しました。ありがとうございます!


3 ● kn1967
●20ポイント

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文の件については解決しました。ホントにありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ