おはようございます。
Access97で受注管理データベースを作成しています。
新規顧客コード作成の際、いくつかの条件でコードを分けています。
そのためSQLで抽出し、それに1を足して新規コードとしています。

たとえば下記のSQL文を書き、
mySQL="SELECT Max(顧客コード) AS 顧客コードの最大 FROM 顧客マスタ GROUP BY グループ HAVING (グループ='CB');"

その抽出結果を取得したいのですが、そのためにはレコードセットとみなさせるのかと思い、いろいろやってみたのですが、結局出来ません。(それからして怪しい)
VBAお勉強中で根本的に仕組みを理解できていないせいだと思うんですが、
数冊参考書を見ても分かりませんでした。

分かりにくい質問文ですみません。どなたか助けてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Dim DB As Database


Dim RRS As Recordset
Dim SQL As String

Set DB = CurrentDb
SQL ="SELECT Max(顧客コード) AS 顧客コードの最大 FROM 顧客マスタ GROUP BY グループ HAVING (グループ='CB');"
Set RRS = DB.OpenRecordset(SQL, dbOpenSnapshot)
Me!顧客コード = RRS!顧客コードの最大 + 1
RRS.close

上記の方法でいかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます!
あーだこーだやってたのに、あっけなくできました。
本当にどうもありがとうございました。

お礼日時:2001/08/28 11:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Q【SQL】あるマスタのレコードに存在しない項目を取得する。

下記のような2つのマスタがあるとします。

・商品名マスタ

商品コード  商品名
- - - - - -  - - - - - -
n01       ナス
k01       カボチャ
n02       ニンジン
t01       タマネギ


・購入履歴マスタ

履歴連番  商品コード  購入日時
- - - - -   - - - - - -  - - - - - -
001     n01      2008-07-01
002     k01      2008-07-02
003     n01      2008-07-03
004     n01      2008-07-04
005     k01      2008-07-04

このとき、購入履歴マスタのレコードに存在しない商品を取得するSQLはどのように組み立てればよいでしょうか?
例えば上記例で言えば、下記のような結果を得ることが目的です。

商品コード  商品名
- - - - - -  - - - - - -
n02       ニンジン
t01       タマネギ

以上、よろしくお願いします。

下記のような2つのマスタがあるとします。

・商品名マスタ

商品コード  商品名
- - - - - -  - - - - - -
n01       ナス
k01       カボチャ
n02       ニンジン
t01       タマネギ


・購入履歴マスタ

履歴連番  商品コード  購入日時
- - - - -   - - - - - -  - - - - - -
001     n01      2008-07-01
002     k01      2008-07-02
003     n01      2008-07-03
004     n01      2008-07-04
...続きを読む

Aベストアンサー

こんにちは。

SELECT 商品名マスタ.商品コード
, 商品名マスタ.商品名
, 購入履歴マスタ.商品コード
FROM 商品名マスタ LEFT JOIN 購入履歴マスタ
ON 商品名マスタ.商品コード = 購入履歴マスタ.商品コード
WHERE ((購入履歴マスタ.商品コード) Is Null);

でどうですか。

QSQLでGROUP項目を列表示する方法?

SQLでGROUP後の結果を列で効率よく取得する方法を教えてください。(Oracle8.1.7)

現状は下記SQLで列表示していますが、あまり良い方法ではないと思います。別の取得方法があれば教えてください。

○出力したい結果
担当CD1 4月金額 5月金額
担当CD2 4月金額 5月金額

○現状SQL問題点
・一応取得可能ですがこれだと月数分毎回GROUPするので時間が勿体無いと思います。
・T1で4月~5月を範囲でGROUP後、その結果を4月分、5月分と抽出だけしたいのですが可能でしょうか?
・もっと他に効率よい取得方法があれば教えてください。

○現状のSQL内容
(SELECT A.TANTOCD,
T1.KIN1 KINGAKU1,
T2.KIN2 KINGAKU2
FROM
(SELECT YYMM,TANTOCD
FROM TBL
WHERE YYMM >= 200204 AND YYMM <= 200205
GROUP BY YYMM,TANTOCD ) A,
(SELECT YYMM,TANTOCD,SUM(KIN) KIN1
FROM TBL
WHERE YYMM ='200204'
GROUP BY YYMM,TANTOCD) T1,
(SELECT YYMM,TANTOCD,SUM(KIN) KIN2
FROM TBL
WHERE YYMM ='200205'
GROUP BY YYMM,TANTOCD) T2
WHERE A.TANTOCD = T1.TANTOCD(+)
AND A.TANTOCD = T2.TANTOCD(+));

SQLでGROUP後の結果を列で効率よく取得する方法を教えてください。(Oracle8.1.7)

現状は下記SQLで列表示していますが、あまり良い方法ではないと思います。別の取得方法があれば教えてください。

○出力したい結果
担当CD1 4月金額 5月金額
担当CD2 4月金額 5月金額

○現状SQL問題点
・一応取得可能ですがこれだと月数分毎回GROUPするので時間が勿体無いと思います。
・T1で4月~5月を範囲でGROUP後、その結果を4月分、5月分と抽出だけしたいのですが可能でしょうか?
・もっと他に効率よい取得...続きを読む

Aベストアンサー

ORACLE TechNet(利用登録要)のサンプルを参考にしたもの:

select TANTOCD,
Sum( Decode( YYMM, 200204, KIN, 0 ) ) 'KINGAKU_APR',
Sum( Decode( YYMM, 200205, KIN, 0 ) ) 'KINGAKU_MAY'
from TBL group by TANTOCD;

QACCESSでクエリ作成時複数のフィールドを同じマスタ項目から抽出する方法

ACCESSでクエリを作成しています。テーブルは”売上明細”と”社員マスタ”があります。売上明細には”担当者CD”と”加工者CD”というフィールドがあって、それぞれのフィールドが、同じ社員マスタの”社員CD”をキーに”社員名”を抽出したいのですが、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。第一次結合を実行する分割クエリを作成し、SQLステートメントにそのクエリを含めてください」とメッセージが出ます。どこにどのように設定すればいいのでしょうか?優先順位は特にありませんが、最初に設定されている担当者CDを第一次結合とする場合どうすればいいのでしょうか?この第一次・第二次はどのような意味があるのでしょうか?まだVBAは手付かずで、初心者です!これから学習しようとしているところです。よろしくお願いいたします。

Aベストアンサー

ひとつのテーブルの異なるフィールドが同じテーブルを参照しているわけですね
こういう場合はひとつのテーブルを2つのフィールドに結合するのではなく
同じテーブルを別の名前で結合します

クエリデザインビューでの操作だと、社員マスタを2回クエリデザインビューに取り込み
(2つ目は異なる名前で取り込まれます)
担当者と、加工者に別々に結合します

QPL/SQLのコード

DBの中のVIEWにこのようなコードがありました。

SELECT
AAA,
BBB,
MAX(CCC) AS CCC
FROM
TABLE

SELECTのなかにある’MAX(CCC) AS CCC’という部分が
分りません。関数なのでしょうか、本で調べてみたのですが
のっていませんでした。
どなたか分る方はいませんでしょうか。
宜しくお願い致します.

Aベストアンサー

Haizyさんのおっしゃる通り、MAX(CCC)をCCCという列名とする指定です。
値を集計したものや、今回のように最大値を関数を使用して取得した場合にテーブルやビューを検索するときに使用します。
また、テーブルを複数組み合わせて使用する場合にも便利です。
たとえば、、
テーブル Table_A
列aaa
bbb
ccc

テーブル Table_B
列aaa
bbb
ccc
dddd

Table_AとTable_Bを結合して検索したい場合、
select A.aaaas aaa,
A.bbbas bbb,
A.cccas ccc,
B.dddas ddd
fromTable_A A,/* Table_A をAという別名にする */
Table_B B,/* Table_B をBという別名にする */
whereA.aaa = B.aaa
andA.bbb = B.bbb
andA.ccc = B.ccc;

aaa, bbb, cccはどちらのテーブルの列を使用するか明示しないとエラーになります。
でも、これがビューで作成されていてA.aaaなんて指定をして検索するのはイヤですよね。
また、よく英字で短縮した名称を使用している場合もありますが。

selectaaaas 伝票番号,
bbbas 明細番号
formTable_C

とかするとわかりやすいですよ。
別名がちゃんと指定されていればビューで使用している列が変更されても問題が発生しない場合もあります。

Haizyさんのおっしゃる通り、MAX(CCC)をCCCという列名とする指定です。
値を集計したものや、今回のように最大値を関数を使用して取得した場合にテーブルやビューを検索するときに使用します。
また、テーブルを複数組み合わせて使用する場合にも便利です。
たとえば、、
テーブル Table_A
列aaa
bbb
ccc

テーブル Table_B
列aaa
bbb
ccc
dddd

Table_AとTable_Bを結合して検索したい場合、
select A.aaaas aaa,
A.bbbas bbb,
A.cccas ccc,
B.dddas ddd
fromTable_A A,/* Table_A をAという...続きを読む

QSQLでデータを抽出する方法

テーブルAとテーブルBがあり、AとBには「項目番号」と言うフィー
ルドがそれぞれある。

この時、Aの「項目番号」とBの「項目番号」が一致しないデータを
抽出したい。

例:
A:番号,名称
  1 ,あ
  2 ,い
  3 ,う

B:番号
  1
  4
  5

この場合、抽出したいデータは、
 番号
  2 ,い
  3 ,う
なのですが、どうしても、
  1 ,あ
  1 ,あ
  2 ,い
  2 ,い
  2 ,い
  3 ,う
  3 ,う
  3 ,う
となってしまいます。

どうしたら良いか教えてください。
よろしくお願いします。

Aベストアンサー

こんにちは。maruru01です。

データベースが何かわからないので、一般的なやつを。

SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE B.番号 = A.番号)


ところで、どのデータベース(Access、SQL Server、Oracleなど)かを書きましょう。
また、現在希望の結果が得られていないSQLステートメントを載せた方がいいですよ。
では。


人気Q&Aランキング

おすすめ情報