質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

343閲覧

ACCESSの更新クエリで、特定のフィールドに入っている値の最大値+1の連番を振りたい

ikurasan

総合スコア22

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2023/05/18 01:29

ACCESSの更新クエリで、番号フィールドに入っている値の最大値を使って、番号が0のレコードに、最大値+1の連番を振るためのSQLを教えてください。

例えば、以下のように番号フィールドに対して連番を振りたいです。

テーブル名:個人

ID番号名前
11000A
21001B
30C
40D

↓更新クエリの実行結果

ID番号名前
11000A
21001B
31002C
41003D

前提

番号フィールドは数値型です。
IDフィールドはオートナンバーです。

試したこと1

UPDATE 個人 SET [個人].番号 = DMax("番号","個人") + 1 WHERE [個人].番号 <= 0;

を実行したところ、以下のように更新されてしまいました。

ID番号名前
11000A
21001B
31002C
41002D

試したこと2

UPDATE 個人 SET [個人].番号 = (SELECT DMax("番号","個人")+1 FROM [個人]) WHERE [個人].番号 <= 0;

を実行したところ、「更新可能なクエリである必要があります」と表示されてしまいました。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

下記でどうでしょう。

SQL

1UPDATE 2 個人 3SET 4 個人.番号 = DMax("番号","個人")+DCount("ID","個人","番号=0 AND ID<=" & 個人.ID) 5WHERE 個人.番号=0;

投稿2023/05/18 01:46

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikurasan

2023/05/18 01:53

ありがとうございます! 連番が振れました(T-T)/
guest

0

Bing AIの回答(動作未確認)

まず、一時テーブルを作成します。この一時テーブルには、個人テーブルのIDフィールドと、新しい番号フィールドが含まれます。

SQL

1SELECT 2 ID, 3 (SELECT COUNT(*) FROM 個人 AS T2 WHERE T2.ID <= 個人.ID AND T2.番号 <= 0) + DMax("番号", "個人") AS NewNumber 4INTO 5 TempTable 6FROM 7 個人 8WHERE 9 番号 <= 0;

次に、個人テーブルと一時テーブルを結合して、UPDATE文を実行します。

SQL

1UPDATE 2 個人 INNER JOIN TempTable ON 個人.ID = TempTable.ID 3SET 4 個人.番号 = [NewNumber];

最後に、一時テーブルを削除します。

SQL

1DROP TABLE TempTable;

これらのクエリを順番に実行することで、個人テーブルの番号フィールドが0以下のレコードに対して、最大値+1の連番が振られます。

投稿2023/05/18 01:39

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikurasan

2023/05/18 01:55

回答ありがとうございます! 試したのですが、うまく振ることができませんでした。 でも、一時テーブルを利用する案は気が付きませんでした。 気づきを頂き、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問