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

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

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

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

SQL

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

Q&A

解決済

4回答

10833閲覧

Access SQL:サブクエリでselectした結果を使いたい

salty_

総合スコア15

Access

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

SQL

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

0グッド

0クリップ

投稿2019/07/26 23:06

前提

それぞれのテーブルにはこのようなデータが入っています。
◎◎:予約者情報
△△:店舗マスタ
■■:◎◎と△△を照合させて、一致した結果が入っているテーブル

##作ったもの
2つ動くそれぞれで正しい結果が得られるクエリがあります。(テーブル名は伏字にしています)

①◎◎と△△を照合させて、不一致だったデータを取得するクエリ。

SELECT ◎◎
FROM ◎◎ LEFT JOIN △△ ON ([△△].[店舗名] = [◎◎].[店舗名])
WHERE [△△].[店舗名] = [◎◎].[店舗名] IS NULL;

②■■テーブルから月別に必要な情報を取得するクエリ

SELECT YEAR([■■].[日時]) AS 年, MONTH([■■].[日時]) AS 月, Count(
[■■].受付日時
) AS 総数, Count(
[■■].予約 = '●'
Or Null
) AS 予約, Count(
[■■].実施 = '●'
Or Null
) AS 実施, Count(
[■■].結果 = 'OK'
Or Null
) AS OK人数 INTO 新しいテーブル
FROM ■■
GROUP BY YEAR([■■].[日時]), MONTH([■■].[日時]);

##求めたい結果
①◎◎と△△を照合させて、不一致だったデータを取得するクエリ。】の実行結果から
②■■テーブルから月別に必要な情報を取得するクエリ】を実行したいです。
=不一致の結果も月別に集計したいです。
(サブクエリと呼ぶのでしょうか。selectした結果をselectしたいです。)

作ったクエリ

SELECT YEAR([■■].[日時]) AS 年, MONTH([■■].[日時]) AS 月, Count(
[■■].受付日時
) AS 総数, Count(
[■■].予約 = '●'
Or Null
) AS 予約, Count(
[■■].実施 = '●'
Or Null
) AS 実施, Count(
[■■].結果 = 'OK'
Or Null
) AS OK人数 INTO 新しいテーブル
FROM (
SELECT ◎◎
FROM ◎◎ LEFT JOIN △△ ON ([△△].[店舗名] = [◎◎].[店舗名])
WHERE [△△].[店舗名] = [◎◎].[店舗名] IS NULL;
)
GROUP BY YEAR([■■].[日時]), MONTH([■■].[日時]);

調べてみてFROM句の中に、①のselect文を入れてみたのですが
FROM句の構文エラーになります。。。

初歩的な質問で申し訳ありませんが、どなかたお知恵をお貸しください。
よろしくお願いします。

#実行環境
Acceess 2016です。

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

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

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

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

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

Orlofsky

2019/07/27 01:29

NULL の判断は カラム名 IS NULL とか カラム名 IS NOT NULL って記述します。 伏せ字じゃなくて、ちゃんと実行できるレベルのSQLを提示しないと回答してくれる奇特な人は少なそう。
salty_

2019/07/27 02:46

ご指摘ありがとうございます。例にするテーブルを記述する時間がなかったので、とりあえずこの形式で質問しましたが、そうなんですね… とりあえず、①の結果を別のテーブルにinsertしてから②の実行をするようにします。
gentaro

2019/07/27 03:40

伏せ字にするならするで(回答が付きやすいかどうかは別として)良いんですけど、最初の > SELECT ◎◎ > FROM ◎◎ の時点でおかしい気が。 「SELECT ◎◎.*」のつもりかもしれないけど、「◎◎」テーブルにどんな項目があるのかの説明がされていないので、せめてテーブル定義ぐらいは資料として載せましょう。
guest

回答4

0

よく見てみたら、①のクエリは、本当に、単体で正しく、動作するのでしょうか。
左外部結合を利用した不一致クエリみたいですが、◎◎を左側だとして、普通であれば、WHERE句は、
「WHERE [△△].[店舗名] = [◎◎].[店舗名] IS NULL」
ではなく、
「WHERE [△△].[店舗名] IS NULL」
だと思うのですが。

投稿2019/08/14 16:25

tswalker

総合スコア8

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

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

0

あと、FROM句に、サブクエリを記述する時に、最後のこところに「;」が付きっぱなしなので、これも、取り除いておいた方が良いと思います。(←これが原因?)

投稿2019/08/14 16:11

tswalker

総合スコア8

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

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

0

まずは、【①◎◎と△△を照合させて、不一致だったデータを取得するクエリ。】 をサブクエリで、いきなり書かずに、別のクエリとして保存。そのうえで、【②■■テーブルから月別に必要な情報を取得するクエリ】 のテーブル部分に、①のクエリ名を入れて、普通に動作するのでしょうか。
もし、動作するので、あれば、まとめて、サブクエリとして、記述する際の指定の仕方が、まずいのかもしれませんね。
たしか、Accessでfrom句にサブクエリを入れる場合は、「SELECT ~ FROM (サブクエリ) AS tmp」のように、別名定義をするのだったと思うのですが、そのような記述で指定してみると、正しく動作するでしょうか。

投稿2019/08/14 16:02

tswalker

総合スコア8

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

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

gentaro

2019/08/14 17:18

回答は編集できます。複数回答を投稿するのではなく追記してまとめてください。
guest

0

自己解決

私のレベルが低いですので、そのまま①の実行結果を別テーブルにinsertして、②を実行して結果を取得します。

投稿2019/07/27 04:00

salty_

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問