Access (VBA)

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

 
(Windows 7 Professional : Access 2013)
空き番号を表示させたい
投稿日時: 19/11/21 14:10:14
投稿者: にーさん

よろしくお願いします、【にーさん】と申します。
 
(T_得意先テーブル)・・・項目は【オートナンバー】【得意先CD】【得意先名】【県コード】・・・・等が
             あります。
【得意先CD】の空き番号を表示させたいのです。
 
【得意先CD】は、上2桁は県番号/下3桁が番号 の 5桁になっています。
以前は適当に番号を付けていたので、番号の管理が出来ておらず、何番が開いているか分からない状態です
 
ですので、画面で県を指定(県コード入力)して≪検出≫ボタンを押すと、上記条件から空いている
得意先CDを表示させたいのですが、どうすればできますか?
 
現在、得意先件数は1万件ほどありますので、最初から調べていくと時間が掛かりますので
クエリー(Q_該当コード抽出)で画面で入力された県コードと(T_得意先テーブル)県コードを比較して、
同一県コードの得意先コードだけを抽出してソート(昇順)に並べてクエリーを作成しています。
 
こちらのクエリー(Q_該当コード抽出)を使って簡単に検出することは出来ませんか?
 
つたない説明ですが、分かっていただけましたでしょうか?
よろしくお願いします

回答
投稿日時: 19/11/21 20:16:39
投稿者: よろずや

 SELECT A.空きCD FROM (
 SELECT 得意先CD + 1 AS 空きCD
 FROM T_得意先テーブル
 WHERE 得意先CD LIKE "13*") A
 LEFT JOIN T_得意先テーブル B
 ON A.空きCD = B.得意先CD
 WHERE B.得意先CD IS NULL;
 
"13*" の部分は "13%" かも。
 
チョット手抜きですので、
最小【得意先CD】より小さい空きCDは検出出来ません。

回答
投稿日時: 19/11/21 21:53:31
投稿者: よろずや

 SELECT A.空きCD FROM (
 SELECT 得意先CD + 1 AS 空きCD
 FROM T_得意先テーブル
 WHERE 県コード = "13") A
 LEFT JOIN T_得意先テーブル B
 ON A.空きCD = B.得意先CD
 WHERE B.得意先CD IS NULL;
  
"13" の部分は 県コード。
  
チョット手抜きですので、
最小【得意先CD】より小さい空きCDは検出出来ません。
 

投稿日時: 19/11/22 14:06:37
投稿者: にーさん

よろずやさん、ありがとうございます。
  
でも、このまま写しても駄目ですよね?
構文エラーが出てしまいます。
  
もう少し自分なりに分かってるつもりでしたが・・・(/_;)
全く分かっていないのだと思い知らされました。
  
申し訳ございませんが、もう少しくだいて教えてもらえませんでしょうか?
  
  
それと、この中にある【A】とか【B】は何なのでしょうか?

回答
投稿日時: 19/11/22 20:37:51
投稿者: よろずや

テーブル名の別名を付けるのに、Access では AS が省略できないみたいですね。
 
SELECT A.空きCD FROM (
 SELECT 得意先CD + 1 AS 空きCD
 FROM T_得意先テーブル
 WHERE 県コード = "13") AS A
 LEFT JOIN T_得意先テーブル AS B
 ON A.空きCD = B.得意先CD
 WHERE B.得意先CD IS NULL;
 
( SELECT 得意先CD + 1 AS 空きCD
 FROM T_得意先テーブル
 WHERE 県コード = "13")
をテーブルとみなして別名を A とする。
 
T_得意先テーブル の別名を B とする。
 
ON A.空きCD = B.得意先CD
フィールド名の頭にテーブル名(別名)を付けて、出所を明確にする。

回答
投稿日時: 19/11/23 15:55:58
投稿者: hatena
投稿者のウェブサイトに移動

Accessでもテーフル名の別名はASを省略できます。
 
よろずやさんの2番目の回答(投稿日時: 19/11/21 20:16:39) でも構文エラーにはなりません。
 
ただ、【得意先CD】がテキスト型だと、型不一致エラーになりますね。

得意先CD + 1
とすることで数値型に変換されますので。
 
得意先CD 県コード ともテキスト型の場合下記でOKだと思います。
 SELECT A.空きCD FROM (
 SELECT (得意先CD + 1) & "" AS 空きCD
 FROM T_得意先テーブル
 WHERE 県コード = "13") A
 LEFT JOIN T_得意先テーブル B
 ON A.空きCD = B.得意先CD
 WHERE B.得意先CD IS NULL;

 
サブクエリを使わずに下記のように記述することもできます。
 
SELECT (A.得意先CD + 1) & "" AS 空きCD
FROM
 T_得意先テーブル A
 LEFT JOIN T_得意先テーブル B ON (A.得意先CD + 1) & "" = B.得意先CD
WHERE
 A.県コード = "13" AND B.得意先CD IS NULL;

 

投稿日時: 19/11/25 11:02:39
投稿者: にーさん

よろずやさん、hatenaさん、ありがとうございました。
 
理解できました、お世話になりました。
 
また、分からない所があれば教えてください(^o^)