クエリのフィールドで数字をカウントアップする方法とは?

このQ&Aのポイント
  • クエリのフィールドで数字をカウントアップする方法について教えてください。
  • 目標は、指定したテーブルのフィールドの数字をカウントアップするクエリを作成することです。
  • 現在の状態では、指定したテーブルのフィールドの数字を増やすことができません。
回答を見る
  • ベストアンサー

クエリのフィールドで数字をカウントアップ

目標は、以下のようなクエリ表示結果を出したいです。 受注No     枝番 ---------------------- 012-345-6789   2 012-345-6789-A1  2 012-345-6789-A1 3 ※クエリ抽出時にテーブル(T_受注No)の「受注No」と「枝番(最初は1)」を見にいき、同一の校正承認Noが増えるごとに「枝番」の+1カウントアップ。 ※同一校正承認Noがあった場合、+1カウントアップ。 現状は、以下のようなクエリ表示結果です。 受注No     枝番 ---------------------- 012-345-6789   2 012-345-6789-A1  2 ※クエリのフィールドは、枝番: Max(([T_受注No]![枝番])+1)としています。 お手数ですが、やり方、ヒントなどいただけませんか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

私が伝えたいのは、No2で提案したクエリの働きを 確認してほしい、ということです。 以下に行く前に疑問なのですが、No3の補足の中のテーブル1と テーブル2の受注Noが同じデータならばテーブル1の枝番は 何のために存在しているのだろうか、またテーブル1の存在は 何のためなのか、単純に考えればテーブル2を元に同じ受注No に枝番を振っていくだけのことではないのだろうか、もし そうならば提示したクエリをテーブル2に当てはめれば 解決してしまうのでは?ということです。 それはさておき、 >Max(([T_受注No]![枝番])+1)の部分の設定がうまくできずといった状況です。 ということと、「枝番」にこだわっているとこのクエリの 結果が何を表示するのかわかりません。のみならず、 takky-bukky-さんが求める結果がいつまでたっても 手にできません。 (1) そこで、新しいテーブルを作成し、名前をTdata とし、フィールドを ID オートナンバー 番号 テキスト型 設定します。主キーを設定する必要はありません。 オートナンバーのIDは並びを確定するためのものです。 次のようなデータを作成し、 ID    番号 1     101 2     112 3     112 4     256 5     256 6     256 7     312 8     456 9     456 以下のクエリを作成し、クエリの結果を確認してみてください。 一応、IDも表示するようにしておきます。 SELECT Tdata.ID, Tdata.番号, DCount("*","Tdata","[番号]='" & [Tdata]![番号] & "' AND [ID] <= " & [Tdata]![ID]) AS 小計 FROM Tdata; このクエリの表示結果は、以下のようになるはずです。 ID    番号   小計 1     101    1 2     112    1 3     112    2 4     256    1 5     256    2 6     256    3 7     312    1 8     456    1 9     456    2 この結果はtakky-bukky-さんが求める結果に直接つながる ものですから、 >この結果を教えてほしいのですが。 と、No3で結んだのですが。 もし、このクエリの表示結果が、 ID    番号   小計 1     101    1 2     112    1 3     112    1 4     256    1 5     256    1 6     256    1 7     312    1 8     456    1 9     456    1 である、ということなら、「何で?????????」 ということになります。 (2) もし、上記のことが確認できましたら、まずお伝えしたいのは、 この小計の数値の並びが、takky-bukky-さんの言われる、 >※クエリ抽出時にテーブル(T_受注No)の「受注No」と「枝番(最初は1)」 >を見にいき、同一の校正承認 Noが増えるごとに「枝番」の+1カウントアップ。 >※同一校正承認Noがあった場合、+1カウントアップ。 という枝番の原型になるものです。同じ枝番という名前を 使うと考えが迷走してしまうことと、クエリでは同じ フィールド名を使わないようにしてtakky-bukky-さんの 求める順番(言い換えれば累計、あるいは枝番)を求めよう、 ということです。 実は、上記のクエリで本来は回答になるはずなのですが、 問題は、「枝番」なるフィールドが存在して、この「枝番」 が多分初期値が「1」である、そしてこの枝番を確認しながら 数値を上乗せ(+1づつカウントアップ)していく、もしこの 「1」という数値がテーブル上で変化するものであるなら、 さらにその数値に変化したものを加えていかなければ ならない、そのとき個々のデータによって枝番の数値が 違うばあいがあるのでは・・・という疑問。 さらには、No2の捕捉で登場した「未発注データ」という フィールドがNo3の補足では退いている、というのも 最終的には気になります。 (3) そこで、まず枝番を登場させてみます。Tdataに枝番フィールドを 追加し、以下のようにします。 ID    番号    枝番 1     101     1 2     112     1 3     112     1 4     256     1 5     256     1 6     256     1 7     312     1 8     456     1 9     456     1 そこで、 >※クエリ抽出時にテーブル(T_受注No)の「受注No」と「枝番(最初は1)」 >を見にいき、同一の校正承認 Noが増えるごとに「枝番」の+1カウントアップ。 >※同一校正承認Noがあった場合、+1カウントアップ。 を拡張解釈すると、(1)のクエリの結果に枝番フィールドの データを追加するという解釈もできるので、 SELECT Tdata.ID, Tdata.番号, Tdata.枝番, DCount("*","Tdata","[番号]='" & [Tdata]![番号] & "' AND [ID] <= " & [Tdata]![ID]) AS 小計, (SELECT Max([Temp]![枝番]) FROM Tdata As Temp WHERE [Tdata]![番号] = [Temp]![番号] Group By [Tdata]![番号])+DCount("*","Tdata","[番号]='" & [Tdata]![番号] & "' AND [ID] <= " & [Tdata]![ID]) AS 小計2 FROM Tdata; クエリの表示結果は、 ID    番号    枝番 小計1   小計2 1     101     1    1     2 2     112     1    1     2 3     112     1    2     3 4     256     1    1     2 5     256     1    2     3 6     256     1    3     4 7     312     1    1     2 8     456     1    2     3 9     456     1    3     4 上記の結果の小計1と小計2はどちらがtakky-bukky-さんが 求める結果なのでしょうか。 (4) さらには、(3)を受け継いで、枝番フィールドが不規則に 変動し,さらにはデータがその都度「番号」フィールドの 並びが昇順ではなくばらばらに追加されていくならば、 たとえば、 ID    番号    枝番 1     101     1 2     112     1 3     112     6 4     256     1 5     256     1 6     256     10 7     312     1 8     456     1 9     456     9 11     987    6  12     222    5 13     222    10 14     115    1 15     222    9 16     987    3 のようなデータに「枝番」、すなわちここでは小計 といことにしていますが、を振っていくならば クエリで処理するならばIIDフィールドを一旦 削除し、番号をテーブルにおいて昇順に並び替え、 あらためてオートナンバーのIDフィールドを 設定してクエリで処理、ということをデータが 追加されるたびにすることが必要になります。 そにょうな手間はぶくならば、テーブルに小計フィールドを 設定し、少し複雑で長めのVBAで小計フィールドに書き込んでいき、 データを見るときはクエリで番号を昇順にして確認する、 という処理するようになります。  

takky-bukky-
質問者

お礼

自分が目標としている結果は、クエリでは難しくVBAでレコードセットを用いることで解決いたしました。 私からの質問内容、知識・言葉足らずで非常に理解し難かったと思います。 ご対応いただき本当にありがとうございました。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

意図がよく伝わっていないようなのですが。 SELECT T_受注No.受注No, DCount("*","T_受注No","[受注No]='" & [T_受注No]![受注No] & "' AND [ID] <= " & [T_受注No]![ID]) AS 小計 FROM T_受注No; 上記を実行すると、クエリの表示は、    受注No     小計 ---------------------- 012-345-6789    1 012-345-0123    1 012-678-0123    2 012-345-6789-A1  1 012-345-6789-B1  1 012-345-6789-C1  1 あるいはデータにより、    受注No     小計 ---------------------- 012-345-6789    1 012-345-0123    1 012-678-0123    2 012-345-6789-A1  1 012-345-6789-A1  2 012-345-6789-A1  3 のようになるはずです。提示したクエリには 枝番のフィールドは含まれていません。 あるいは、IDも表示するならば、 SELECT T_受注No.ID, T_受注No.受注No, DCount("*","T_受注No","[受注No]='" & [T_受注No]![受注No] & "' AND [ID] <= " & [T_受注No]![ID]) AS 小計 FROM T_受注No; のようにすると、 ID   受注No     小計 ---------------------- 1 012-345-6789    1 2 012-345-0123    1 3 012-678-0123    2 4 012-345-6789-A1  1 5 012-345-6789-B1  1 6 012-345-6789-C1  1 あるいはデータにより、 ID   受注No     小計 ---------------------- 1 012-345-6789    1 2 012-345-0123    1 3 012-678-0123    2 4 012-345-6789-A1  1 5 012-345-6789-A1  2 6 012-345-6789-A1  3 のようになるはずですが。 この結果を教えてほしいのですが。

takky-bukky-
質問者

補足

ご返信が遅くなってしまい申し訳ありません。 どこをどのように変更して良いのか分からず、何度もご回答いただけていること本当にうれしいです。 ありがとうございます。 以前の私からの回答部分の「枝番」は誤表記で、正しくは「小計」です。 すみませんでした。 抽出したいクエリの説明をもう一度させてください。 目標は、以下のようなクエリ表示結果を出したいです。 受注No      枝番 ---------------------- 111-222-3333    2 111-222-3333-A1  2 111-222-3333-A1 3 ※クエリ抽出時にテーブル(T_受注No)の「受注No」と「枝番(最初は1)」を見にいき、同一の受注Noが増えるごとに「枝番」の+1カウントアップ。 現状は、以下のようなクエリ表示結果です。 受注No      枝番 ---------------------- 111-222-3333    2 111-222-3333-A1  2 ※クエリのフィールドは、枝番: Max(([T_受注No]![枝番])+1)としています。 このクエリのもととなるテーブルは2つです。 テーブル1 : T_受注No  ID(主キー)   受注No     枝番 -------------------------------  1      111-222-3333    1  2      111-222-3333-A1  1  3      222-333-4444    1  4      333-444-5555    1  5      444-555-6666-A1  1  6      444-555-6666-B1  1  7      012-345-6789    1  8      012-345-6789-A1  1  9      012-345-6789-C1  1  ・           ・        ・  ・           ・        ・  ・           ・        ・ テーブル2 : IN_Excelデータ  ID(主キー) 品目コード 品名     受注No       手配日 ・・・ -----------------------------------------------------------  1         123    AAA  111-222-3333   2012/06/25 ・・・  2         345    BBB  111-222-3333-A1 2012/06/25 ・・・  3         678    CCC  111-222-3333-A1 2012/06/25 ・・・ この2つのテーブルの「受注No」の結合プロパティは、「両方のテーブルの結合フィールドが同じ行だけを含める。」です。 SQLで表すと、 SELECT IN_Excelデータ.受注No, Max(([T_受注No]![枝番])+1) AS 枝番 FROM T_受注No INNER JOIN IN_Excelデータ ON T_受注No.受注No = IN_Excelデータ.受注No GROUP BY IN_Excelデータ.受注No; です。 IN_Excelデータは毎回ExcelデータをAccessにインポートしたデータになり、ここにデータがインポートされたと同時(上記例では3つ)に、今回抽出したいクエリにより枝番をつけていきたいです。 長文ですみません。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

試しに、以下のSQL文でクエリを作成してみてください。 SELECT T_受注No.受注No, DCount("*","T_受注No","[受注No]='" & [T_受注No]![受注No] & "' AND [ID] <= " & [T_受注No]![ID]) AS 小計 FROM T_受注No;

takky-bukky-
質問者

補足

教えていただいたSQL文での結果は、下記の通りになりました。    受注No     枝番 ---------------------- 012-345-6789    1 012-345-0123    1 012-678-0123    1 012-345-6789-A1  1 012-345-6789-B1  1 012-345-6789-C1  1 もともとのクエリは、 SELECT T_未発注データ.受注No, Max(([T_受注No]![枝番])+1) AS 枝番 FROM T_受注No INNER JOIN T_未発注データ ON T_受注No.受注No = T_未発注データ.受注No GROUP BY T_未発注データ.受注No; です。Max(([T_受注No]![枝番])+1)の部分の設定がうまくできずといった状況です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

なかなかレスがつかないようですが。 条件として、レコードの並びを確定するフィールドが 必要なので、オートナンバーのフィールドをT_受注Noに 設定し、そのフィールド名をIDとしてください。 そして、以下のように設定してみてください。 一応、受注Noフィールドはテキスト型としています。 枝番: DCount("*","T_受注No","[受注No]='" & [受注No] & "' AND [ID] <= " & [ID]) もし、受注Noフィールドが数値型ならば以下のようにしてみてください。 枝番: DCount("*","T_受注No","[受注No]=" & [受注No] & " AND [ID] <= " & [ID])

takky-bukky-
質問者

補足

ご回答いただきありがとうございます。 教えていただいたものを試したところ、「指定されたフィールド'[受注No]'がSQLステートメントのFROM句にある複数のテーブルを参照しました。」というエラーとなったので、下記に変更し試しました。 枝番: DCount("*","T_受注No","[受注No]='" & [T_受注No]![受注No] & "' AND [ID] <= " & [T_受注No]![ID]) クエリ結果は、下記の通りです。    受注No     枝番 ---------------------- 012-345-6789-A1  1 012-345-6789-A1  1 012-345-6789    1 ※このクエリの「受注No」はExcelからインポートしたデータのテーブルのもので、「受注No」のダブりも存在し、そのためテーブル(T_受注No)を見にいって、そのテーブルと一致しなおかつダブりがあるものは+1ずつカウントアップしていきたいというクエリを作りたいです。 ちなみに、テーブル(T_受注No)は、下記の通りです。  ID    受注No     枝番 -------------------------  1  012-345-6789    1  2  012-345-6789-A1 1 長文ですみません。

関連するQ&A

  • クエリでカウントしつつ、チェックボックスを

    クエリでカウントしつつ、チェックボックスを使えるように(更新できるように)したいです。 アクセス2003です。 テーブル1(主キーなし) 名前   退職(Yes/No型) 佐藤   No 田中   No 佐藤   No から下のクエリを作りました。 SELECT テーブル1.名前, Count(テーブル1.名前) AS 名前のカウント, テーブル1.退職 FROM テーブル1 GROUP BY テーブル1.名前, テーブル1.退職; 結果、 名前 名前のカウント 退職 佐藤   2        No 田中   1        No となりますが、退職フィールドにチェックを入れることは出来なくなってしまいます。 カウントしつつ、更新可能なクエリにしたいのですが不可能でしょうか? 最終的には、このクエリ1をレコードソースとしてフォームに表示させたいです。 ご教示よろしくお願い致します。

  • Access2010 クエリ作成 超初心者

    以下のテーブルがあります テーブル:受注no、売上日、キャンセル区分… 12345、2013/9/20、 12346、2013/9/20、 12347、2013/9/21、 12348、2013/9/25、 12346、2013/9/26、1 12348、2013/9/30、1 クエリを使用して、キャンセル区分に1が入力されていない受注noのカウントをしたいのですが、クエリ1回でカウントする方法がありましたら教え いただきたく思います 。 よろしくお願いします。

  • Access クロス集計でフィールド名001~連番

    テーブルAを元にクロス集計クエリを作り、フィールド名をDCount関数で連番になるようにしています。 列名: "枝番" & DCount("*","テーブルA","[商品番号]='" & [商品番号] & "' and 枝番<='" & [枝番] & "'") あまり詳しくない為、以下のページを参考にさせてもらいました。 http://okwave.jp/qa/q3037682.html すると、クロス集計クエリのフィールド名が以下のようになります。 枝番1 枝番10 枝番11…枝番2 枝番20… できることなら、枝番001 枝番002 枝番003…枝番010 枝番011…のように並んで欲しいのですが、そうするためにはどんな設定又は関数?が必要ですか? 作業環境は、OS:Windws7、使用ソフト:Access2003です。 勉強不足で申し訳ありませんが、ご教授お願い致します。

  • テキストボックスに、クエリの集計カウント数を表示

    Access2019 クエリの商品毎の集計カウントをテキストボックスに、表示させよう取り組んでいますが表示出来る迄至っていません。 クエリ名:3_商品_全集計カウント クエリのフィールド:商品名 , 商品名のカウント 例> りんご 20 みかん 100 りんごのカウント数が表示するテキストボックスに、20が表示する様にしたいです。 テキストボックスは、それぞれ商品毎のテキストボックスをフォームに設けて、テキストボックスのコントロールソースに以下の関数を組んで結果は #Name? です。 DLookup("商品名のカウント", "3_商品_全集計カウント", "商品名 = '" & りんご & "'") ご教授頂けたら幸いです。 以上、宜しくお願い致します。

  • アクセスのクエリ フィールドの合計

    フィールドの合計 アクセスのクエリでいくつかのフィールドの合計を出そうとして クエリのフィールドに以下の式をいれております。 ⇒合計:([A])+([B])+([C]) (例えば[A][B][C]のフィールドの合計を出すとして) しかし、[A]の値が1、[B]の値が2、[C]の値が2と入っている場合は5と合計値が当然でますが 例えば[C]のフィールドが空欄の場合、合計値欄が空欄で表示されます。 非常に簡単な質問かと恐縮ですがおしえてください!

  • ACCESS2003クエリの結合した表示形式が

    ACCESS2003でクエリを作成しました。各テーブルのフィールドを結合したのですが 表示形式が思ったようになりませんでした。 【Aテーブル】 フィールド:学部NO データ型:数値型 書式:00 【Bテーブル】 フィールド:学科NO データ型:数値型 書式:00 【ABクエリ】 フィールド:学籍NO:[Aテーブル]![学部NO]&[Bテーブル]![学科NO] 【ABクエリ】の結果が数字が4桁表示されません。 (例) 0101 と表示してほしいのですが、   11  と表示されます。 各テーブルでは、01と表示されるのですが・・・。 宜しくお願いします。

  • 【Access】フィールドにつけた別名を同じクエリで抽出に使いたいです

    【Access】フィールドにつけた別名を同じクエリで抽出に使いたいです。 Access2003を使っています。 困っている状況は以下のようなもです。 ■テーブル1  ・フィールド1 ■クエリ1  ・フィールドA:フィールド1  ・フィールドB:[フィールドA]   【抽出条件】>=10 このような条件で、クエリを実行すると、 「パラメータの入力 フィールドA」というダイアログが立ち上がってしまいます。 上記載のクエリ1でフィールドAの[]は自然についてしまうのではずせません。 今はもう一つクエリを作る事でこの状況はなんとかしましたが、フィールドに別名をつける毎にクエリを作るとクエリの数が多くなってしまうので困っています。 クエリでフィールドに別名をつけた場合は、そのクエリ上でその別名を使って抽出をかけることはできないのでしょうか? よろしくお願いします。

  • Access2000 の更新クエリでカウントアップ

    初歩的なことだと思うのですが、 Access2000を利用し、 あるテーブルのAというキーのレコードの数値項目2つを、 更新クエリを動作させるたびに、1づつカウントアップさせたいのですが、 どのように記述するのでしょうか? キー項目 項目1 項目2 タイムスタンプ A     0   1  2007・・。 ここで、更新クエリを起動して、 A     1   2  2007・・・ ここで更新クエリを起動して A     2   3  2007・・・ 更新クエリのレコードの更新欄にはどのように記述すれば、正しく動作するかお教えください。 (タイムスタンプは、Now()を設定しています) 宜しくお願いします。

  • ACCESS クエリ内フィールドがVISTA環境で勝手に変更されてしまう

    よろしくお願いします。 XP環境・ACCESSで作成したシステムですが、他のユーザーのVISTA環境で開くと、勝手にクエリが書き換えられてしまいます。 データの書き換えは一切無く、クエリの設定が変更されてしまうのです。 VISTA環境でクエリの再設定などを行おうとしましたが、エラーが発生してしまいます。(構文エラー 演算子がありません と表示されクエリにフィールドの追加などが出来ません。)これが一番の問題なのかもしれません。 XP環境で設定しなおしても、VISTA環境で開くと、やはりクエリが勝手に変更されてしまうといった具合です。 現在発生しているエラーは二つです。 (1)選択クエリで表示するフィールドが勝手に消える。全て消えるわけではなく、残っているフィールドもあるが、あるフィールド以下(は全て消えてしまう。 (2)テーブルでデータ型yes/noのフィールドを、クエリで抽出条件「yes」で表示させたいのですが、クエリ内のフィールドそのものが消えてしまい、抽出条件どころか全てのデータが表示されてしまう。 データ型Yes/noのフィールドが全て消えるわけではなく、残っているものもあります。 原因が全く分からず大変困っています。 お心あたりのある方、お力を貸してください!!よろしくお願いします。

  • ACCESS クエリでの抽出の方法について

    毎度お世話になっております。 ACCESS2003、SQLSERVER2000を使用しています。 以下のテーブルがあります。 テーブル1 フィールド1   フィールド2   A        10   A        20   A        -10   B         1   B         2   B         3 フィールド1をグループ化し、 フィールド2に0より小さい数がある場合はNG、 ない場合はOKと表示したいのです。 希望する結果 フィールド1   フィールド2   A         NG   B         OK 私が考えた方法は、 1.クエリ1(フィールド2が0以下のフィールド1を抽出する)を作成 2.テーブル1とクエリ1をLEFT JOINし、IS NULL ならOK、そうでないならNGを表示 としました。希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)、 または別解をご教授ください。 よろしくお願いします。

専門家に質問してみよう