• ベストアンサー

アクセスの連番について

アクセスでテーブルのkanri_Noという項目に管理番号を振りたいと思っています。 他のテーブルに後でインサートするので、そのテーブルのKanri_NOの最大値をKanri_Maxとして引いてきてそのKanri_Max+連番という風に振りたいのですが、どうSQLを入れればいいのか分かりません。 Kanri_Maxが4000だったら、4001、4002、4003・・・、Kanri_Maxが5000だったら5001、5002、5003とKanri_Noの項目に連番を振りたいのです。 連番を振る前のKanri_Noは空白です。 初心者で申し訳ないのですが教えてください。

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

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

Kanri_NO のNOはNoなので、以下にしてください。 INSERT INTO T2 ( Kanri_No ) SELECT (SELECT (COUNT(*) + (SELECT Max(T1.Kanri_No) AS Kanri_Max FROM T1)) FROM T1 AS Temp WHERE Temp!Kanri_No<=T1!Kanri_No) AS 連番 FROM T1; たぶん、#2でも大丈夫だとは思いますが、 一応、大文字、小文字の区別があるので。

mamekomatsu
質問者

お礼

ありがとうございます。 !を . にしたら上手く行きました。助かりました!

その他の回答 (3)

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.4

ANo.1のshinkamiです Kanri_NO のデータ型がオートナンバー型でないときは 元テーブルのフィールドにID(オートナンバー型)を主キーとして加えた 中間テーブル(ID,フィールド名1,フィールド名2,フィールド名3,…)を用意して 1.docmd.RUNSQL ("delete from 中間テーブル名") 2.docmd.RUNSQL ("insert into 中間テーブル名(フィールド名1,フィールド名2,フィールド名3,…) select 項目名1,""文字列"",項目名3,… from 元テーブル名 where …") 3.docmd.RUNSQL ("insert into 他のテーブル名(Kanri_NO,フィールド名1,フィールド名2,フィールド名3,…) select ID+Kanri_Max,項目名1,""文字列"",項目名3,… from 中間テーブル名 ") ※1.のSQL文で中間テーブルは初期化され 新規に挿入されるレコードのIDには自動的に 1からの連番が振られます。

mamekomatsu
質問者

お礼

2回も教えていただきありがとうございます。RUNSQLという考えがなかったので勉強になりました。分けて書いていただいたので読みやすかったです

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

先に連番だけを振っておきたいというのであれば、 テーブル名をT1、連番を振るテーブル名をT2として、 Kanri_NOは数値型とし、 INSERT INTO T2 ( Kanri_NO ) SELECT (SELECT (COUNT(*) + (SELECT Max(T1.Kanri_NO) AS Kanri_Max FROM T1)) FROM T1 AS Temp WHERE Temp!Kanri_NO<=T1!Kanri_NO) AS 連番 FROM T1; あるいは、他のフィールドも同時に追加したい というのであれば、他のフィールドを上記の クエリに追加すればいいです。

mamekomatsu
質問者

お礼

ありがとうございます。No3の方を使ってみました

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

他のテーブルのkannri_No.のデータ型がオートナンバー型なら何も気にする必要はありません docmd.RUNSQL ("insert into 他のテーブル名(フィールド名1,フィールド名2,フィールド名3,…) select 項目名1,""文字列"",項目名3,… from テーブル名 where …") 上記は1行にして下さい。 ※ここで指定するフィールド名にkannri_No.を外す ・フィールド名と項目名は呼称が違っていてもデータ型が同じであればOK ・記述するフィールド名は一部外していてもOK ・文字列定数のときは上記のように2つづつの[""」で囲む

mamekomatsu
質問者

お礼

回答ありがとうございます。初心者で理解に時間がかかりましたが勉強になりました。スムーズに行きそうな気がします。今後の参考にさせていただきます。

関連するQ&A

  • アクセスでSQLを実行させて値をとりたい

    masterテーブルに管理noをキーとしてデータが入っています。 管理noは完全に連番になっておらず、ただ新しく追加するものは 最大+1の番号を割り振るようにしようと思っています。 そこで新規追加のフォームを開くと管理noの欄に最大+1の番号が 表示され変更出来ない設定にします。 SQLで書くと select max(管理no)+1 from master でしょうか。 この命令を実行させて返ってきた数字を使いたいのです。 SQLを実行させる為の変数宣言の辺りから詳しくお願いします。 ちなみにMDBもフォームも同じアクセス2003のファイルにあります。

  • [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の値だけ取れればいいです。 宜しくお願いいたします!!

  • (ACCESS)連番取得について

    アクセスで顧客管理をしています。 DMax関数を用いて、レコードを追加する度に自動で連番を振る設定に したいと思っていますが、上手くいかないため質問させてください。 【テーブル名】T_顧客一覧 【入力用のフォーム名】F_顧客登録 【連番を入力させたい項目(フィールド名)】No(テーブルでは主キーに設定) とし、フォームの”No”の既定値に   =DMax("No","T_顧客一覧")+1 と入力するのですが、フォームには1としか表示されません。 非常に初歩的な質問だとは思うのですが、 何か原因として考えられることがありますでしょうか? 情報が足りないようでしたら補足させていただきます。 よろしくお願いします。

  • ACCESSでテーブルのMAX値(文字列を除く)をやりたい

    ACCESS2000で1テーブル内の項目のMAX値を取りたいのですが、数値ではないのは除外したいです。 どのようにSQLを組んだらいいのでしょうか。 ex) テーブル名:a フィールド名:ID(string型) +--+ |01| +--+ | 2| +--+ |03| +--+ |04| +--+ |05| +--+ |06| +--+ |R1| +--+ 上記の項目でMAX値06を取りたいのですが SQL>select MAX(ID) as MaxID from a とすると「R1」がMAX値になる。 「06」をMAX値として取りたい。

  • 連番に紐づく小連番の最大値を除外するには…

    お世話になります。 以下のテーブルから、次のアウトプットを行うためのSQLをご教授ください。 【インプット】 大連番 小連番 … 000001 000001 … 000001 000002 … 000001 000003 … 000001 000004 … 000002 000001 … 000002 000002 … 000002 000003 … 000003 000001 … 000003 000002 … 【アウトプット】 大連番 小連番 … 000001 000001 … 000001 000002 … 000001 000003 … 000002 000001 … 000002 000002 … 000003 000001 … ※大連番毎に小連番の最大値のデータを除いている。 どうか、お力添えをお願い致します。。。

  • Accessのデータベースの構築の仕方について

    Accessのデータベースの構築の仕方について Access初心者です。 1注文書にmax3品目まで記入できる注文書データベースの構築について教えて下さい。 メインテーブルと、サブデータを作っており、 メインテーブルには、注文書Noと注文者名、日付の1注文書内の重複するフィールドを サブテーブルには、連番(max3)、品名(max3)、金額(max3)の重複しないデータとしています。 以下の様な感じです。 メイン→注文書No  1   2   2   3   3   3 サブ →連番      1   1   2   1   2   3 本当は、注文書Noを主キーにして、同じ注文書Noを入力出来ない様にしたいのですが、インデックス、主キー、リレーションシップで値が重複しているのでテーブルを変更できないというエラーメッセージが出ます。 仕方が無いので、現在は諦めて、以下の様に注文書Noでリレーションシップを組んでいます。なので注文書Noの2度打ちの可能性はあります。 メインIDもサブIDも意味が無いと思っていますが。 メイン                    サブ(主キー設定無し) メインID(オートNo)主キー      サブID(オートNo) 注文書No-----------注文書No 注文者名                   連番 日付                      品名                          金額 私のやりたいことは、一つの注文書Noに対し、max3つまで連番で紐づけて、同じ注文書Noを入力出来ないようにしたいことなのですが。 この様な場合、どの様にデータベースとして、リレーションシップはどの様にして、主キーもどの様にするのが正しいやり方なのでしょうか? リレーションシップも良く理解出来ていない状態ですが、宜しくお願いいたします。

  • ACCESS VBA 並び替え 列 カウント

    ACCESSを業務で使用し始めたものです。 ・特定のクエリから一定の操作をしたテーブル ・又は特定の複数のテーブルの抽出項目 を元にコマンドボタンを押した時、 一定操作を行ったテーブルを出力できるVBAソースを作成したいと思ってます。 (クエリ) (複数のテーブル) ⇒ (操作) ⇒ (特定の名前を持ったテーブル) (例)元となるクエリ(複数のテーブルの集合体)が以下にあります。 管理番号|NO|名前 1|NO.1|スプーン 2|NO.2|スプーン 3|NO.3|スプーン 4|NO.1|フォーク 5|NO.2|フォーク 6|""|ナイフ 7|NO.1|お鍋 以下のように一つのテーブルとして出力したい 名前|空白|管理番号|台数 スプーン|空白|1|3 フォーク|空白|4|2 ナイフ|空白|6|1 お鍋|空白|7|1 テーブル変換の機能 ・名前が同じ物の個数を表示する ・名前が同じ物の管理番号は若い番号にする ・列のならびを 管理番号|NO|名前 → 名前|空白|管理番号|台数 ・元のテーブルやクエリは消さない ・NOがふられていない項目についても台数をカウントする(ナイフのように) 至急に必要なので、コードを頂ければとても幸いですが やりかたの方向性でも結構です。 よろしくお願いいたします。

  • ACCESS2000でグループごとに連番を振りたい

    ACCESSで登録フォームを作成し、 そこで、下記のようなテーブルを作ろうとしてます。 伝票番号 明細番号 商品   1   1   りんご   1   2   みかん   2   1   すいか   2   2   かき   1   3   なし   3   1   くり 伝票番号ごとに連番を振って行きたいのですが、 オートナンバー型にしてしまうと、伝票番号に 関係なく、連番を振ってしまいます。 この場合の解決方法を教えていただけないでしょうか。

  • ACCESSのクエリで連番をつけたい!

    過去に同じような質問がありますが、どうしてもうまくいかないので 再度質問させてください。 当方はそれほどスキルが高くないのでSQLなどはさっぱりです・・・・ 下記のような処理を行いたいのですが、 何卒宜しくお願いいたします。 ・「CUSTOMER」ごとに「SHIPMENTDATE」の昇順で「NO」に連番をつけたい ・データは数字ではなくTEXT ・全データは15万件ほど テーブル名:カウント対象受注 CUSTOMER ORDER REGULAR SHIPMENTDATE NO 00020041 000160104 0024174 2011/3/15 4 00020033 000001931 0000323 2011/2/20 2 00020009 000052835 0008807 2010/12/12 1 00020041 000160103 0024174 2011/2/15 3 00020033 000001930 0000323 2010/12/20 1 00020041 000160102 0024174 2011/1/15 2 00020033 000001932 0000323 2011/4/20 3 00020009 000052836 0008807 2011/1/12 2 00020041 000160101 0024174 2010/12/15 1 00020041 000160105 0024174 2011/4/15 5

  • Access2000におけるテーブル追加について

    テーブル1にテーブル2の内容をすべて追加しようと思います。 二つのテーブルのフィールド項目は同じにしました。(テストなのでとりあえず番号と名前) マクロを使ってやろうと思い、アクションを「SQLの実行」とし、SQLステートメント には「INSERT INTO <テーブル1> SELECT<社員番号>,<名前>FROM<テーブル2>」 としました。 しかし、マクロを実行してみると「INSERT INTO 構文エラー」となってしまいます。 なぜなんでしょうか?

専門家に質問してみよう