AccessVBAで作業しています。
テーブル1の中に、A・B・C・D・E・Fという数値型のフィールドがあり、レコード数は6万件とします。
A=100 B=50 のA~Fのレコードをまず取り出し、
レコード件数が1件ならF列の値を表示、
レコード件数が複数ならC列の最大値を含むレコードを選択。
それでレコード件数が1件ならF列の値を表示。
それでもレコード件数が複数ならDの最大値を含むレコードを選択。
それで件数が1件ならF列の値を・・・
それでも複数件ならE列の最大値を・・・
と続きます。
そのたびに元のテーブル1から選択してくるのは効率が悪い気がします。
みなさんはどのように処理されるのでしょうか。
また、レコードセットを使用したSQLの書き方がわからず困っています。
どなたか教えていただけませんか? 何卒よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
私的方法
1.AとBの条件でFとFのカウント値を取る
2.1の結果がFのカウント値が1ならFの値を取る
→ここで処理終了
3.AとBの条件でCとCのカウントとFの最大値を取ります。この時Cの降順にソートします。グループ化すると言うことですよ。
4.3の結果の1件目のCのカウント数が1ならFの最大値を取る
→ここで処理終了
5.以下Dに対して、Eに対して・・・同文
て方法が簡単ですね
通常ワークテーブルにCからFの値を入れてから上記の方法をすれば件数にもよりますが速い処理が可能となります。
SQL的には
INSERT INTO WKTBL (C,D,E,F)
SELECT C,D,E,F
FROM TRNTBL
WHERE A = 100 AND B = 50
その後はWKTBLにて処理をするこの時はA、Bの条件は不要。
レコードセットはpaz777さんので良いでしょう。
目が覚めた感じがします。私は随分難しいことを考えていたんですね。
「ソートをかけてグループ化」、思いつきもしませんでした。
良い方法を聞けて良かった。心から感謝します。
本当にありがとうございました。
No.1
- 回答日時:
こんにちは。
少し質問があるのですが、
> レコード件数が複数ならC列の最大値を含むレコードを選択。
の時に「A=100 B=50」は抽出条件に入りますか?
もし入るのであれば、最初に「A=100 B=50」だけの条件で抽出したデータ
を別テーブル(例えばテーブル2)に格納したあとに別テーブルを元にし
て参照すれば、そんなには負荷はないように思うのですが・・・
Accessのバージョンが不明なのですが、2000か97でしたら以下に使用例を
明記します。これが正解って訳ではありません。他にも色々とやり方はあ
りますのでj279702さんもお勉強してみて下さい。
---------------------------------------------------------------------
'
Dim DBN As Database 'データベース定義
Dim SNAP As Recordset 'SnapShot用
Dim DYNA As Recordset 'Dynaset用
Dim SQLSTR As String 'SQL構文
'
'
' 検索SQL文を作成
SQLSTR = "" '↓ここにSQLを記入
SQLSTR = SQLSTR & "SELECT * FROM テーブル1"
SQLSTR = SQLSTR & " WHERE A = 100 AND B = 50"
'
' データベース接続
Set DBN = DBEngine.Workspaces(0).Databases(0)
Set SNAP = DBN.OpenRecordset(SQLSTR, DB_OPEN_SNAPSHOT)
Set DYNA = DBN.OpenRecordset("テーブル2",DB_OPEN_DYNASET)
'
' 検索結果
If SNAP.BOF = True Then
MsgBox "データはありませんでした。", 48, "検索結果"
SNAP.Close
DYNA.Close
Exit Function
Else
' データコピー
SNAP.MoveFirst
Do Until SNAP.EOF
DYNA.AddNew
DYNA("A") = SNAP("A")
DYNA("B") = SNAP("B")
DYNA("C") = SNAP("C")
DYNA("D") = SNAP("D")
DYNA("E") = SNAP("E")
DYNA("F") = SNAP("F")
DYNA.Update
SNAP.MoveNext
Loop
End If
SNAP.Close
DYNA.Close
---------------------------------------------------------------------
見当違いの回答でしたらごめんなさいです。
ではでは・・・
質問の仕方が悪くてすみませんでした。欲しかったお返事です。
今まで誰かに質問して、ここまで教えて頂いたことはありませんでした。
すごく感激しています。
レコードセットを保持するよりテーブルで作業すれば早い処理が出来るとは思っていませんでした。やはり勉強不足ですねぇ。これからも頑張ります。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
首吊りどこ締めるの
-
変な話しになります。尿検査で...
-
白血球が多いとどんな心配があ...
-
今朝、毎朝の習慣でオナニーし...
-
1日前の検尿
-
射精をして1週間以内に尿検査を...
-
検便についてです。 便は取れた...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
男です。昨日の午後3時くらいに...
-
EXCELで式からグラフを描くには?
-
彼女のことが好きすぎて彼女の...
-
中出しをするとお腹が痛い・・・。
-
値が入っているときだけ計算結...
-
これって喉仏ですか? 私は女性...
-
EXCELの条件付き書式で数式を空...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
中出しをするとお腹が痛い・・・。
-
麻疹風疹の抗体検査結果につい...
-
エクセルでエラーが出て困って...
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
至急!尿検査前日にオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
精子が黄色?
-
小数点以下を繰り上げたものを...
-
値が入っているときだけ計算結...
-
口の中に黒い血の塊
-
健否~書類の書き方~
-
甲状腺が腫れているが血液検査...
-
はしかの抗体検査は何科の病院...
-
テスターで断線を調べる方法教...
おすすめ情報