以下の2つのテーブルを用いて
販売した数を更新したいのですが、
どの様に作成すれば
良いのでしょうか?
クエリーテーブルに結果を出力は出来たのですが、
クエリーテーブルではなく、BUSYO_MSTのM_F_countに
カウント結果を出すには、どこを直せばいいでしょうか。
UPDATE BUSYO_MST
SET M_F_count=(
SELECT Count(M_File.key) AS M_F_count
FROM BUSYO_MST LEFT JOIN M_File ON BUSYO_MST.Key = M_File.key
GROUP BY BUSYO_MST.Key);
=========================
<< BUSYO_MST >>
ID | key | M_F_count
---+--------------
01 | バナナ | 0
02 | りんご | 2
03 | みかん | 1
<< M_File >>
ID | key
---+--------------
01 | りんご
02 | みかん
03 | りんご
No.2ベストアンサー
- 回答日時:
更新クエリにサブクエリを含むとエラーが生じます。
更新可能なクエリであることが必要
http://support.microsoft.com/default.aspx?scid=k …
の以下の部分。
フィールドの値の合計、平均、カウント、その他の集計値を計算するクエリでは、データを更新で
きません。また、クロス集計クエリ、選択クエリ、集計値や集計関数を含むサブクエリから、[レコ
ードの更新] 行にあるフィールドを参照する更新クエリではデータを更新できません。この問題を
回避するには、更新クエリの [レコードの更新] 行で [定義域集計関数] を使用します。これで、
クロス集計クエリ、選択クエリ、集計値や集計関数を含むサブクエリから、フィールドを参照でき
るようになります。
したがって、個別に定義域集計関数を使用するか、
あるいは、コードでテーブルを一括更新するように
します。
【一括更新の場合】
質問のクエリのサブクエリを少し変更して、
Q集計
SELECT M_File.key, Count(M_File.key) AS M_F_count
FROM M_File
GROUP BY M_File.key;
というクエリQ集計を作成します。
以下を標準モジュールに貼り付け、
イミディエイトウィンドウでtest
を実行してみてください。
なお、DAOを使用しているので
コード表の参照設定で、
Microsoft DAO xx Object Library
のチェックを確認してください。
Sub test()
Dim db As Database
Dim rst As Recordset
Dim rsq As Recordset
Set db = CurrentDb
Set rsq = db.OpenRecordset("Q集計", dbOpenDynaset)
Set rst = db.OpenRecordset("BUSYO_MST", dbOpenDynaset)
If rsq.RecordCount > 0 Then
rsq.MoveFirst
Do Until rsq.EOF
rst.MoveFirst
Do Until rst.EOF
If rsq!Key = rst!Key Then
rst.Edit
rst!M_F_count = rsq!M_F_count
rst.Update
Exit Do
End If
rst.MoveNext
Loop
rsq.MoveNext
Loop
End If
rst.Close: Set rst = Nothing
rsq.Close: Set rsq = Nothing
db.Close: Set db = Nothing
End Sub
また、このプロシージャを適当な名前に
して、フォームなりのボタンクリックで
Pribate Sub ボタン1_Click()
Call test
End Sub
とすることもできます。
No.4
- 回答日時:
>SELECT Count(M_File.key) AS M_F_count
>FROM BUSYO_MST LEFT JOIN M_File ON BUSYO_MST.Key = M_File.key
>GROUP BY BUSYO_MST.Key
というのは
[Count]
0
2
1
のカウント数の項目だけ、他テーブルと紐付けるキーがありませんね。
それと、
このカウントを求めるのに「BUSYO_MST」との紐付けは必要ですか?。
ここで、紐付けが無くても
りんご 2
みかん 1
という(発生分の)2個のレコードは生成できます。
これを基にBUSYO_MSTを更新する、という手もあります。
バナナ 5→0
りんご 1→0
みかん 3→0
と全部0でクリアしておいて
りんご 2
みかん 1
の情報から
バナナ 5→0
りんご 1→0→2
みかん 3→0→1
です。
いずれにしても、そのエラーメッセージの説明内容をよく見てからです。
「BUSYO_MST」が
カウントするための基になっているテーブルであり、
カウント更新するための更新先のテーブルです。
普通に考えるとそれでうまく行くの?、となりますよね?。
No.1
- 回答日時:
『更新可能なクエリであることが必要です。
』が出たのでは?。
カウント求めるときに使われるテーブルを直接更新している、そんなことになってますか?。
更新用の『SELECT~』文においてはカウントだけの項目です。なので、更新先のテーブルと結合させる項目キーがありませんね?。
いったんテーブルに作成することは考えてますか?。
この回答への補足
>『更新可能なクエリであることが必要です。』
>が出たのでは?。
おっしゃられる通りです。
更新可能なクエリであることが必要ですの意味がわかりませんでした。
>更新先のテーブルと結合させる項目キーがありませんね?。
IDを入れないといけないのでしょうか。
まだまだ初心者で、どこに入れればいいのか思いつきません。
>いったんテーブルに作成することは考えてますか?。
考えていません。
試しにBUSYO_MSTを全部一緒に書き出すのと同時には出来ました。
INSERT INTO BUSYO_MST ( [key], F_No, LineCD, 部門名, 部署CD, 部署名, M_F_count )
SELECT DISTINCT M_File.key, M_File.F_No, M_File.LineCD, M_File.部門名, M_File.部署CD, M_File.部署名, Count(M_File.key) AS M_F_count
FROM M_File GROUP BY M_File.key, M_File.F_No, M_File.LineCD, M_File.部門名, M_File.部署CD, M_File.部署名
HAVING (((M_File.部署CD) Is Not Null));
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- モニター・ディスプレイ DisplayPort 入力のMSTハブ(Linux対応)を探しています。 Linux を2画面で作 1 2022/11/07 21:10
- UNIX・Linux DisplayPort 入力のMSTハブ(Linux対応)を探しています。 Linux を2画面で作 1 2022/11/07 20:48
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FROM の中で CASE を使えるでし...
-
クエリを使って縦に一行ずつ足...
-
VBA 得意先ごと且つ日付ごとに...
-
accessクロス集計で前月21日~...
-
access 存在しない項目を”0件”...
-
AccessからExcelへエクスポート...
-
複数列フィールド値のクロス集計
-
ACCESSのクエリで集計で、先頭...
-
レポートウィザードの集計のオ...
-
Accessで別テーブルの個数をユ...
-
Accessフォームにクロス集計ク...
-
アクセス レポートのテキスト...
-
「警告 : NULL 値は集計または...
-
クロス集計の結果を元に戻す方法
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FROM の中で CASE を使えるでし...
-
ACCESSのクエリで集計で、先頭...
-
複数列フィールド値のクロス集計
-
「警告 : NULL 値は集計または...
-
AccessからExcelへエクスポート...
-
access 存在しない項目を”0件”...
-
クロス集計の結果を元に戻す方法
-
桐の集計(集計行設定のこと)...
-
Accessフォームにクロス集計ク...
-
accessクロス集計で前月21日~...
-
アクセスクエリ 締め日毎で絞...
-
VBA 得意先ごと且つ日付ごとに...
-
Access 抽出データ件数のカウン...
-
Accessで年齢から年代ごとの集計
-
アクセス レポートのテキスト...
-
MS-Accessのクロス集計クエリと...
-
SQLのクエリの書き方を教えて下...
-
ACCESS レポートでページごとに...
-
ファイルメーカーでピボットテ...
-
レポートウィザードの集計のオ...
おすすめ情報