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

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

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

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

Q&A

3回答

932閲覧

Access クエリの解析

shimpei

総合スコア13

Access

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

0グッド

0クリップ

投稿2017/12/26 05:19

お世話になっております。
AccessおよびSQL初心者なので、教えてください。

Accessのクエリの解析について、ご教授下さい。
以下のクエリを投げたところ、
レコードによって、「UsageType.detail」がNullになる場合があります。

■質問内容
detailカラム自体は、Nullの項目がないのですが、
なぜ、レコードによって、Nullが発生しているか原因を確認しております。

・質問1:
Nullにならないように、抽出させたいです。
そのため、Group Byなどの集計関数を削った方がいいのであれば、それが可能なクエリを教えて頂けないでしょうか。

・質問2:
From句が複雑でなかなか理解できないため、クエリを分けられるのであれば、
分けたverのクエリを教えていただけないでしょうか。(※理解を深めたいため)

■クエリ

SELECT [アカウントマスタ].Custmer_Number, [アカウントマスタ].Customer_Name, 詳細課金データ_With_ResourceID.[user:Name] AS Name, 詳細課金データ_With_ResourceID.ProductName, UsageType.detail, Sum(詳細課金データ_With_ResourceID.UsageQuantity) AS 利用量, UsageType.unit AS 単位, Sum(詳細課金データ_With_ResourceID.UnBlendedCost) AS 利用料金 FROM (UsageType RIGHT JOIN (アカウントマスタ INNER JOIN 詳細課金データ_With_ResourceID ON [アカウントマスタ].AWS_Account = 詳細課金データ_With_ResourceID.LinkedAccountId) ON UsageType.key = 詳細課金データ_With_ResourceID.UsageType) LEFT JOIN UsageType変換マスタ ON UsageType.key = UsageType変換マスタ.UsageType WHERE (((詳細課金データ_With_ResourceID.ItemDescription) Not Like "*AWS Reseller Program Discount*" And (詳細課金データ_With_ResourceID.ItemDescription)   Not Like "*PAR_APN_ProgramFee*" And (詳細課金データ_With_ResourceID.ItemDescription)   Not Like "*AWS_Developer_Tools_Survey*" And (詳細課金データ_With_ResourceID.ItemDescription)   Not Like "*SFST_SFxT_Incentives*")) GROUP BY [アカウントマスタ].Custmer_Number, [アカウントマスタ].Customer_Name, 詳細課金データ_With_ResourceID.[user:Name], 詳細課金データ_With_ResourceID.ProductName, UsageType.detail, UsageType.unit, 詳細課金データ_With_ResourceID.LinkedAccountId HAVING (((詳細課金データ_With_ResourceID.ProductName) Is Not Null) AND ((詳細課金データ_With_ResourceID.LinkedAccountId)=154946556956));

■各テーブル構成
TBL_アカウントマスタ

フィールド名データ型サイズ
AWS_Account12数値型
Custmer_Number8数値型
Customer_Name255テキスト型
ecplus1数値型

TBL_Usagetype

フィールド名データ型サイズ
ID-オートナンバー型
key255テキスト型
detail255テキスト型
region_name255テキスト型
unit255テキスト型
active_flg1数値型

TBL_詳細課金データ_With_ResourceID

フィールド名データ型サイズ
ID-オートナンバー型
InvoiceID255テキスト型
PayerAccountId12テキスト型
LinkedAccountId12テキスト型
RecordType255テキスト型
RecordId255数値型
ProductName255テキスト型
RateId-テキスト型
SubscriptionId-テキスト型
PricingPlanId-テキスト型
UsageType255テキスト型
Operation255数値型
AvailabilityZone255テキスト型
ReservedInstance255テキスト型
ItemDescription255テキスト型
UsageStartDateyyyy/mm/dd日付/時刻型
UsageEndDateyyyy/mm/dd日付/時刻型
UsageQuantity-数値型
BlendedRate-数値型
BlendedCost-数値型
UnBlendedRate-数値型
UnBlendedCost-数値型
ResourceId255テキスト型
user:Name255テキスト型
user:Project255テキスト型
user:Solution255テキスト型

お手数ですが、よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

駆動表は Right join で指定している部分になりますので、
詳細課金データ_With_ResourceID.UsageType
がNullであるかまたはUsageTypeに登録の無い値が設定されているかの何れかだと思います。
多分Nullなんでしょう。

投稿2017/12/27 05:14

sazi

総合スコア25138

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

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

0

「NULLになってしまう」とありますが
基本的に「何かをしたい」からRIGHT JOIN、LEFT JOINを選択します。
つまり「NULLが出ること」は前提として折り込み済みでこれらの「外部結合」を選択します。

推測で申し訳ありませんが「あいまいな外部結合が含まれているので」等の
エラーメッセージで色々と変更してみた結果、今のJOIN句になっているのではないですか?

ともかくバックグラウンドやストーリーを知らないこちら側ではこのSQL文を見ても
どうしようもないかと思います。

本来やりたいことを頭の中でまとめて、SQLを理想形に近づけていくのがいいのでは。
多分ですがここらへんから始まると思います。

SQL

1SELECT 2 詳細課金データ_With_ResourceID.LinkedAccountId AS アカウントID, 3 詳細課金データ_With_ResourceID.UsageType AS 利用タイプ, 4 Sum(詳細課金データ_With_ResourceID.UsageQuantity) AS 利用量, 5 Sum(詳細課金データ_With_ResourceID.UnBlendedCost) AS 利用料金 6FROM 詳細課金データ_With_ResourceID 7GROUP BY 詳細課金データ_With_ResourceID.LinkedAccountId,詳細課金データ_With_ResourceID.UsageType

投稿2017/12/26 09:04

sousuke

総合スコア3828

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

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

0

さすがにこの複雑なSQLを文面だけで解析する気力はないので、一般論として。

RIGHT JOIN、LEFT JOIN の外部結合を使ってますが、その場合、結合しているフィールドの片方に一致するキーがないと、そのテーブル側のフィールドはNullになります。

Accessの不一致クエリをウィザードで作成すると、その性質を利用して、不一致レコードを取得してます。

投稿2017/12/26 06:36

hatena19

総合スコア33620

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問