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

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

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

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

Q&A

解決済

1回答

3896閲覧

ACCESSのINSERT INTO VALUES構文で複数のSELECTから値を追加

ataru2222

総合スコア272

Access

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

0グッド

0クリップ

投稿2021/07/04 12:42

編集2021/07/04 13:25

前提・実現したいこと

ACCESSのinsert into values()の結果で複数のSELECTから取得したい

発生している問題・エラーメッセージ

現在元データにGROUP BYをかけた構文の
kingaku1,ninzu1に9月分
kingaku2,ninzu2に10月分

の集約した値を完成後のデータに入れたいと考えております。

INSERT INTO VALUES構文で複数のSELECTから値を追加することは可能でしょうか?

サンプル元データ
イメージ説明

完成後のデータ
イメージ説明

該当のソースコード

INSERT INTO RESULT( kojo ,busho ,shozoku ,kingaku1 ,ninzu1 ,kingaku2 ,ninzu2 ) VALUES( kjData.kojo ,kjData.busho ,kjData.shozoku ,kingaku1 ,ninzu1 ,kingaku2 ,ninzu2 ) SELECT kjData.kojo ,kjData.busho ,kjData.shozoku ,Sum(kjData.kingaku) AS kingaku1 ,Count(*) AS ninzu1 FROM kjData WHERE (( (kjData.k_date) = #09/1/2021# )) GROUP BY kjData.kojo ,kjData.busho ,kjData.shozoku ,kjData.k_date ORDER BY kjData.kojo UNION SELECT Sum(kjData.kingaku) AS kingaku2 ,Count(*) AS ninzu2 FROM kjData WHERE (( (kjData.k_date) = #10/1/2021# )) GROUP BY kjData.kojo ,kjData.busho ,kjData.shozoku ,kjData.k_date ORDER BY kjData.kojo ;

試したこと

UNIONをつけたり、()で囲んで(サブクエリ?)的なやり方を試してみたのですが、
→「SQLステートメントの後にはセミコロン;が必要です」と表示される

ネットのSQL整形ツールでこの形に整形したあとに1行表示に直し再実行かけるも同じ表記のエラーがでる。
→そもそもこの書き方は使えない?

こちらのような場合の解決策をお分かりになられる方いらっしいましたらご教授願います。

よろしくお願いいたいます。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

insert into の場合、ValuesSelectの何れかしか使用しません。
INSERT INTO ステートメント

複数レコード追加クエリ
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]

SELECT [source.]field1[, field2[, …] FROM tableexpression

上記対応以前に、そもそもUNIONクエリーがエラーで成立していませんし、求めたい結果はunionではなくクロス集計ですね。

SQL

1INSERT INTO RESULT(kojo, busho, shozoku, kingaku1, ninzu1, kingaku2, ninzu2) 2SELECT kojo ,busho, shozoku 3 , Sum(iif(k_date= #2021/09/01#, kingaku, 0)) AS kingaku1 4 , Sum(iif(k_date= #2021/09/01#, 1, 0)) AS ninzu1 5 , Sum(iif(k_date= #2021/10/01#, kingaku, 0)) AS kingaku2 6 , Sum(iif(k_date= #2021/10/01#, 1, 0)) AS ninzu2 7FROM kjData 8WHERE k_date in (#2021/09/01#, #2021/10/01#) 9GROUP BY kojo ,busho, shozoku 10ORDER BY kojo ,busho, shozoku

投稿2021/07/04 16:26

編集2021/07/04 16:39
sazi

総合スコア25138

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

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

ataru2222

2021/07/04 21:50

完璧にできました。 思った通りの動きが実現できました。 私自身もクロス集計やUNIONのあたりの勉強を続けていきます。 本当にありがとうございました。
sazi

2021/07/05 01:06

INSERTする項目は、SELECTの名称では無く並びの対比ですから注意。 よってselect での as は不要でもあります。
ataru2222

2021/07/05 11:28

ありがとうございます。 しっかり勉強して、自由に扱えるようにしていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問