アクセスで条件に合うもののみに連番を振る方法は?
- テーブル1のデータをテーブル2に追加する際に、級:昇順・参加番号:昇順で並べ替え、判定が〇・◎のものに級別に証書番号を連番で振る方法を教えてください。
- Dcountを使用して級別に連番を振ることはできますが、判定が〇・◎のものに連番を振る方法がわかりません。
- どなたかアドバイスをいただけると幸いです。
- ベストアンサー
アクセスで条件に合うもののみに連番を振る方法は?
下記のようにテーブル1にデータがあります。 テーブル1 ID 参加番号 級 判定 1 1 2 ◎ 2 2 1 〇 3 3 2 4 4 1 ◎ 5 5 3 ◎ 6 6 2 〇 7 7 1 8 8 3 〇 9 9 2 〇 このデータを追加クエリを使ってテーブル2に追加をします。 その時に級:昇順・参加番号:昇順で並べ替え、同時に判定が〇・◎のものに級別に証書番号として連番を振りたいと考えています。 テーブル2 ID 参加番号 級 判定 証書番号 1 2 1 〇 1 2 4 1 ◎ 2 3 7 1 4 1 2 ◎ 1 7 3 2 5 6 2 〇 2 6 9 2 〇 3 8 5 3 ◎ 1 9 8 3 〇 2 連番を振る場合Dcountを使えばよいみたいですが、級別だけを条件とした場合は連番が振れるのですが、「判定が〇・◎のもの」という条件の付け方がわかりません。 どなたかアドバイスをお願いします。
- yosshi26
- お礼率9% (6/65)
- Access(アクセス)
- 回答数6
- ありがとう数1
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
遅くなりました。データの設定が良くなかったので手間取りましたが、 以下でどうでしょうか。 INSERT INTO テーブル2 ( 参加番号, 級, 判定, 証書番号 ) SELECT テーブル1.参加番号, テーブル1.級, テーブル1.判定, IIf([判定]="〇" Or [判定]="◎",DCount("判定","テーブル1","Not IsNull([判定]) And Not [判定]='欠席' And 参加番号 <=" & [参加番号] & "and 級=" & [級])) AS 証書番号 FROM テーブル1 ORDER BY テーブル1.級, IIf([判定]="〇" Or [判定]="◎",DCount("判定","テーブル1","Not IsNull([判定]) And Not [判定]='欠席' And 参加番号 <=" & [参加番号] & "and 級=" & [級]));
その他の回答 (5)
- piroin654
- ベストアンサー率75% (692/917)
>(2)「判定」フィールドに「〇・◎」が入力されているかを判定する場合 のSQL文ならば補足されたような希望のデータが抽出されると思いますが どうでしょうか?こちらでは希望されるデータが抽出されていますが。
補足
(2)の方法だと下記のようになってしまいます。 ID 参加番号 級 判定 証書番号 : 4 1 2 ◎ 1 7 3 2 欠席 5 6 2 〇 3 6 9 2 〇 4 確かに欠席のデータの証書番号は表示されないのですが、 番号はカウントされてしまいます。 欠席のデータの番号は表示されないのはもちろん、番号付けも飛ばしたいのですが・・・
- piroin654
- ベストアンサー率75% (692/917)
No2です。判定のフィールドが抜けていました。 以下です。訂正しておきます。 (1)「判定」フィールドにデータがないものと判定する場合 INSERT INTO テーブル2 ( 参加番号, 級, 判定, 証書番号 ) SELECT テーブル1.参加番号, テーブル1.級, テーブル1.判定, IIf(Not IsNull([判定]),DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) AS 証書番号 FROM テーブル1 GROUP BY テーブル1.参加番号, テーブル1.級, テーブル1.判定, IIf(Not IsNull([判定]),DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) ORDER BY テーブル1.級; (2)「判定」フィールドに「〇・◎」が入力されているかを判定する場合 INSERT INTO テーブル2 ( 参加番号, 級, 判定, 証書番号 ) SELECT テーブル1.参加番号, テーブル1.級, テーブル1.判定, IIf([判定]="〇" Or [判定]="◎",DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) AS 証書番号 FROM テーブル1 GROUP BY テーブル1.参加番号, テーブル1.級, テーブル1.判定, IIf([判定]="〇" Or [判定]="◎",DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) ORDER BY テーブル1.級;
補足
アドバイス有難うございます。 早速試してみたのですが、私の最初の質問で記載したテーブルデータで情報が不足していました。 最初に示したデータでは「判定」の内容が、「◎・〇・空白」しか記載していませんでしたが、それプラス「欠席」というデータもありました。 したがって、本来は「◎・〇」のみに連番を振りたいのですが、ご提示頂いたSQLでは「欠席」にも番号が振られてしまい下記のようになってしまいました。 ID 参加番号 級 判定 証書番号 : : 4 1 2 ◎ 1 7 3 2 欠席 2 5 6 2 〇 3 6 9 2 〇 4 これを ID 参加番号 級 判定 証書番号 : : 4 1 2 ◎ 1 7 3 2 欠席 5 6 2 〇 2 6 9 2 〇 3 というように連番を振るにはどのようにしたらよいのでしょうか? 引き続きアドバイスをお願いします。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
70歳にもなると、どうにも質問を理解するのに手間取ります。【回答2/2】を書いている途中で訳が分からなくなりました。何が分からないのか?それは、番号を付与する順番です。以下、【回答2/2】の中途までと、疑問について述べます。 【回答2/2】DBSelect()を利用して[ID]リストを取得する。 まず、DBSelect()について紹介します。次は、イミディエイトウインドウでテストした様子のコピペです。 【イミディエイトウインドウ】 ? DBSelect("SELECT * FROM テーブル1",,Chr(13)) 1;1;2;◎ 2;2;1;○ 3;3;2; 4;4;1;◎ 5;5;3;◎ 6;6;2;○ 7;7;1; 8;8;3;○ 9;9;2;○ 行区切り子は、第3引数で指定します。この場合は、改行コードを指定していますので、行単位で改行したデータが戻ってきます。 ? DBSelect("SELECT ID FROM テーブル1") 1;2;3;4;5;6;7;8;9 行区切り子を指定していませんので、デフォルトの";"で連結して取得したデータを戻しています。 ? DBSelect("SELECT ID,参加番号,級,判定 FROM テーブル1 WHERE 級=1 AND Len(判定 & '') ORDER BY 判定 DESC",,Chr(13)) 4;4;1;◎ 2;2;1;○ ? DBSelect("SELECT ID,参加番号,級,判定 FROM テーブル1 WHERE 級=1 AND Len(判定 & '') ORDER BY 判定",,Chr(13)) 2;2;1;○ <---ID=2は1番目だから[証書番号]=1 4;4;1;◎ <---ID=4は1番目だから[証書番号]=2 ? DBSelect("SELECT ID FROM テーブル1 WHERE 級=1 AND Len(判定 & '') ORDER BY 判定") 2;4 ↑ 必要なのは、この[ID]のリスト。この並びが、各[ID]の[証書番号]になります。 【疑問点1】 上記テストでも判るように、○◎か◎○で番号を付与するのか?それで、付与する番号は違う。また、参加番号も加味するのか? 補足されたし!
補足
アドバイス有難うございます。 ご提示して頂いた内容ですが、私には少々難しく理解が出来ません。 せっかくアドバイスを頂いたのに申し訳ありませんが、他の方法を検討してみます。
- piroin654
- ベストアンサー率75% (692/917)
>「判定が〇・◎のもの」という条件の付け方 これは直接「〇・◎」か、あるいはデータが入力されていないかのどちらかで 判定すればいいかと。 テーブル2のIDはオートナンバーにしておきます。 新規のクエリを表示し、デザインビューでSQLビューを表示し、 以下のSQL文をSQLビューに貼り付け、保存します。 クエリを実行するとIDは自動的にレコード数ほど番号が振られます。 (1)「判定」フィールドにデータがないものと判定する場合 INSERT INTO テーブル2 ( 参加番号, 級, 証書番号 ) SELECT テーブル1.参加番号, テーブル1.級, IIf(Not IsNull([判定]),DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) AS 証書番号 FROM テーブル1 GROUP BY テーブル1.参加番号, テーブル1.級, IIf(Not IsNull([判定]),DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) ORDER BY テーブル1.級; (2)「判定」フィールドに「〇・◎」が入力されているかを判定する場合 INSERT INTO テーブル2 ( 参加番号, 級, 証書番号 ) SELECT [テーブル1].[参加番号], [テーブル1].[級], IIf([判定]="〇" Or [判定]="◎",DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) AS 証書番号 FROM テーブル1 GROUP BY [テーブル1].[参加番号], [テーブル1].[級], IIf([判定]="〇" Or [判定]="◎",DCount("判定","テーブル1","参加番号 <=" & [参加番号] & "and 級=" & [級])) ORDER BY [テーブル1].[級]; 以上です。わからないところがあれば補足してください。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【回答1/2】 Q、アクセスで条件に合うもののみに連番を振る方法は? A、同じ条件に一致するIDリストを求めて、何番目が自分かを判定するとOK! ですから、[テーブル2]の作成は無用です。さて、問題は、SQL文中で如何にして《条件に一致するIDリスト》を取得するかがテーマ。で、それは、【回答2/2】で述べます。先ずは、 >SELECT XXX FROM【テーブル1】 というクエリの実行結果を紹介います。
関連するQ&A
- Access DCountでの連番について
DCountで連番を追加したいのですが演算対象条件の記述方法が良く分かりません。 調査用品別販売データクエリの商品コードフィールドに対して連番を振りたいです。 商品コード、連番 00110 1 00110 2 00120 1 00120 2 上記のようにしたいのですが 式1: DCount("商品コード","調査用品別販売データ","商品コード=" & [調査用品別販売データ]![商品コード]) これではエラーが出てしまいます。
- ベストアンサー
- オフィス系ソフト
- クエリで複数項目を昇順後、連番を付ける方法
お世話になります。 表題の通り、ACCESSクエリで連番を付けるにはどうすれば宜しいでしょうか? 調べたのですが、よく分からない為、 関数又は、SQLに詳しい方、よろしくお願いいたします。 (下記もDCOUNT関数でできますか?) テーブル名:T_A --------------------------- 番号 名前 ランキング 1 佐藤 1 2 鈴木 2 3 佐藤 1 4 鈴木 2 5 佐藤 2 --------------------------- 上記のテーブルがあったとして、特産品及び、ランキングを昇順すると、 下記の通りとなります。 --------------------------- 番号 名前 ランキング 3 佐藤 1 1 佐藤 1 5 佐藤 2 4 鈴木 2 2 鈴木 2 --------------------------- ここで、連番という項目を追加して、上から1,2,3と連番を付けるにはどうすれば 宜しいでしょうか。 ↓↓↓↓↓↓↓ (得たい結果) ------------------------------. 番号 名前 ランキング 連番←追加項目 3 佐藤 1 1 1 佐藤 1 2 5 佐藤 2 3 4 鈴木 2 4 2 鈴木 2 5 ------------------------------ 分かる方、教えてください。 よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- Access 番号をつける方法
お世話になっております。 access2010でクエリに番号を割り振ろうと思っています。 「ID」は昇順に並んでおり、同一の「ID」に対しての連番をつけたいです。 クエリ フィールド名:ID、名前 001 田中 001 佐藤 002 山田 003 鈴木 ☆完成図 フィールド名:番号、ID、名前 1 001 田中 2 001 佐藤 1 002 山田 1 003 鈴木 Accessでもexcelのcount関数を使うことはできるのでしょうか? それとも、DCountを使うのでしょうか? 2つ関数の使い方や、用途の違いがよくわかりません。 ご存知の方教えて下さい。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Access2000 連番の振り方
次のようなテーブルに対して連番を振りたいのです。 伝票番号 日付 行番号 金額 00001 2007/01/01 1 1000 00001 2007/01/01 2 1000 00001 2007/01/01 3 1000 00002 2007/01/02 1 1000 00002 2007/01/02 2 1000 00002 2007/01/02 3 1000 以下はこのような状態で続く。 ここで知りたいのは、同日のデータに対しては伝票番号は同じ番号で 行番号のみ連番を振る。 日が変われば伝票番号は次の番号になり、行番号は新たに1から 振りなおすというものです。 クエリーでこのようなことは可能でしょうか。 やはりVBAで組まないと出来ないのでしょうか。 この方法を教えていただきたくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Accessの連番について質問です。
Accessの連番について質問です。 フォームに連番を表示させたいのですが、どうしてもうまくいきません。 当初はDcount関数を使用したのですが、パフォーマンスが非常に悪かった為、サブクエリ化を使用しようと考えています。 SELECT List.ID, List.CreDate, List.Product, (SELECT COUNT('ID') FROM T_List AS T WHERE T.ID <= List.ID AND Cate.MaNum = '3') AS RecordCount FROM T_List AS List INNER JOIN T_MaCate AS Cate ON List.MaCate = Cate.ID WHERE Cate.MaNum = '3' ORDER BY List.ID; 実際はフォームで選択された条件を元に、SQLをString変数に代入してフォームのRecordSourceに入れています。しかし、うまくカウントできていない為、思うように表示されません。 DCount(""ID"",""Q_List"",""List.ID<="" & [List].[ID]) AS RecordCountと テーブルの変わりにクエリにすると、連番はうまく生成されるのすが、非常に時間がかかり、 マシンもブンブンとファンが回りだします。 データレコード数は現在1000レコードで、この先3000程度になります。 この辺りに詳しい方や同様に悩まれた方など、アドバイスよろしくお願いいたします。m(_ _)m サブクエリやDcount等、その他の方法等もいろいろ参考にしたいので、併せてよろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- フィルターが掛かった状態でクエりで連番
クエリでフィルターが掛かった時、連番を付ける事をしたいのですが、この式だと下記の様に連番を付ける事が出来ませんでしたのでご教授頂けれは幸いです。 連番: Val(DCount("*","テーブル名称","ID <= " & [ID])) 例1> テーブル例 ID 品名 1 みかん 2 りんご 3 ぶどう 4 みかん 5 りんご 6 みかん クエリ例 品名 みかんをフィルター ID 品名 連番 1 みかん 1 4 みかん 2 6 みかん 3 例2> テーブル例 ID 品名 120 みかん 121 りんご 123 ぶどう 124 みかん 125 りんご 126 みかん クエリ例 品名 みかんをフィルター ID 品名 連番 120 みかん 1 124 みかん 2 126 みかん 3
- ベストアンサー
- Access(アクセス)
- [Access]別テーブルの最大値以降の連番振り
過去の質問を色々調べたのですが、結局以下の連番の振り方が分からず・・・困っています。 どなたか助けて下さい。お願いいたします。 テーブルA(蓄積されている過去テーブル) 伝票番号 顧客NO 注文日 001 111111 2012/11/10 001 111111 2012/11/10 002 222222 2012/11/25 002 222222 2012/11/25 002 222222 2012/11/25 003 333333 2012/12/31 テーブルB(新規にインポートするテーブル) 004 444444 2013/02/01 004 444444 2013/02/01 005 222222 2013/02/15 005 222222 2013/02/15 006 555555 2013/02/15 006 555555 2013/02/15 上記のように、テーブルBをインポートした時に、伝票番号を「004,004,005・・・」という風に 顧客NO毎に連番を振りたいです。 DmaxやDcount関数を使う事はなんとなく分かったのですが、うまくいきません。 出来れば、クエリで実現したいと思ってます。 テーブルAにある顧客がテーブルBに出てきたとしても、関係なく連番が振れれば問題無いので、 テーブルAからは最大値+1の値だけ取れればいいです。 宜しくお願いいたします!!
- 締切済み
- Visual Basic
- Accessにてテーブル追加時の連番
Accessにて、個人ごとの販売管理をするようなメイン/サブフォーム形式のフォームを作成しました。 テーブルA(メインフォーム用テーブル) ●個人CD ●氏名 ●住所 ・ ・ テーブルB(サブフォーム用テーブル) ●連番(個人CDごとに取得するよう設定) ●日付 ●個人CD ●商品CD ●個数 ・ ・ フォームにて入力する場合、連番は自動で取得するようなVBAを書いています。 追加クエリA ●日付 ●個人CD ・ ・ ※1回の追加では、ひとつの個人CDに対して、1件分のデータ。 追加クエリAにより、テーブルBにまとめてデータを追加したい場合、 連番をどのようにして取得してよいか分かりません。 連番は、個人CDごとに振るようにしたいのですが、どのようにしたらよいでしょうか? よろしくお願いいたします。
- 締切済み
- オフィス系ソフト
- ACCESS フォームに自動連番をふる
Accessでテーブル→クエリ→フォームと作成し、フォームから特定条件を指定して データを抽出しました。 その抽出したデータに自動連番をつける方法を教えてください。
- ベストアンサー
- オフィス系ソフト
- Access:Dcount関数
Access:Dcount関数 の使用方法について質問です。 テーブル作成クエリで新規フィールドに通し番号として新たに連番を打ちたいのですが、 No: DCount("番号","情報一覧","[番号]<=" & [情報一覧]![番号]) このようにした場合に結果は10,13,15,19のようにとびとびの番号しか出てきませんでした。 関数を誤って理解してるものとは思うのですがどうおかしいのかがよくわからず; 「番号」は連番ではなく、重複ないIDです。 よろしく御教授ください。
- ベストアンサー
- オフィス系ソフト
お礼
度々のアドバイス、ありがとうございます。 お教えいただいた内容を参考にして目的を達成することが出来ました。 ありがとうございました。