- ベストアンサー
アクセスの連番について
アクセスでテーブルの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は空白です。 初心者で申し訳ないのですが教えてください。
- mamekomatsu
- お礼率100% (4/4)
- オフィス系ソフト
- 回答数4
- ありがとう数6
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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でも大丈夫だとは思いますが、 一応、大文字、小文字の区別があるので。
その他の回答 (3)
- shinkami
- ベストアンサー率43% (179/411)
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からの連番が振られます。
お礼
2回も教えていただきありがとうございます。RUNSQLという考えがなかったので勉強になりました。分けて書いていただいたので読みやすかったです
- piroin654
- ベストアンサー率75% (692/917)
先に連番だけを振っておきたいというのであれば、 テーブル名を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; あるいは、他のフィールドも同時に追加したい というのであれば、他のフィールドを上記の クエリに追加すればいいです。
お礼
ありがとうございます。No3の方を使ってみました
- shinkami
- ベストアンサー率43% (179/411)
他のテーブルのkannri_No.のデータ型がオートナンバー型なら何も気にする必要はありません docmd.RUNSQL ("insert into 他のテーブル名(フィールド名1,フィールド名2,フィールド名3,…) select 項目名1,""文字列"",項目名3,… from テーブル名 where …") 上記は1行にして下さい。 ※ここで指定するフィールド名にkannri_No.を外す ・フィールド名と項目名は呼称が違っていてもデータ型が同じであればOK ・記述するフィールド名は一部外していてもOK ・文字列定数のときは上記のように2つづつの[""」で囲む
お礼
回答ありがとうございます。初心者で理解に時間がかかりましたが勉強になりました。スムーズに行きそうな気がします。今後の参考にさせていただきます。
関連するQ&A
- アクセスでSQLを実行させて値をとりたい
masterテーブルに管理noをキーとしてデータが入っています。 管理noは完全に連番になっておらず、ただ新しく追加するものは 最大+1の番号を割り振るようにしようと思っています。 そこで新規追加のフォームを開くと管理noの欄に最大+1の番号が 表示され変更出来ない設定にします。 SQLで書くと select max(管理no)+1 from master でしょうか。 この命令を実行させて返ってきた数字を使いたいのです。 SQLを実行させる為の変数宣言の辺りから詳しくお願いします。 ちなみにMDBもフォームも同じアクセス2003のファイルにあります。
- 締切済み
- Visual Basic
- [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)連番取得について
アクセスで顧客管理をしています。 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 … ※大連番毎に小連番の最大値のデータを除いている。 どうか、お力添えをお願い致します。。。
- ベストアンサー
- SQL Server
- 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 構文エラー」となってしまいます。 なぜなんでしょうか?
- ベストアンサー
- その他(データベース)
お礼
ありがとうございます。 !を . にしたら上手く行きました。助かりました!