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

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

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

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

SQL

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

Q&A

解決済

2回答

368閲覧

ACCESSのSQLで単位換算することについて

Haiji

総合スコア1

Access

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

SQL

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

0グッド

0クリップ

投稿2022/04/23 01:21

はじめての利用で恐縮ですがよろしくお願いいたします。
ACCESSのSQLについて質問させてください。

T_使用量
|日付 材料 使用量 単位
|4月1日 |小麦粉10kg/袋 |1 |袋
|4月1日 |小麦粉5kg/袋 |3 |袋
|4月2日 |小麦粉10kg/袋 |40 |kg
|4月2日 |小麦粉5kg/袋 |3 |kg
|4月2日 |パスタ200g/束 |2 |束
|4月2日 |パスタ50g/束 |3 |束
|4月5日 |コーヒー豆300g/袋 |300 |g
|4月6日 |コーヒー豆300g/袋 |2 |袋

というテーブルがあり、同じ材料でも単位が異なるものもあるため、集計を行う際に苦慮しております。

実現したいことは、選択クエリにおいて、

|日付 |材料 |使用量 |単位
|4月1日 |小麦粉10kg/袋 |10 |kg
|4月1日 |小麦粉5kg/袋 |15 |kg
|4月2日 |小麦粉10kg/袋 |40 |kg
|4月2日 |小麦粉5kg/袋 |3 kg
|4月2日 |パスタ200g/束 |400 |g
|4月2日 |パスタ50g/束 |150 |g
|4月5日 |コーヒー豆300g/袋 |300 |g
|4月6日 |コーヒー豆300g/袋 |600 |g

のようにしたいと考えており、

現在考えていることは、原材料のテーブルを、

T_原材料
|材料 |数量 |単位
|小麦粉10kg/袋 |10 |kg
|小麦粉5kg/袋 |5 |kg
|パスタ200g/束 |200 |g
|パスタ50g/束 |50 |g
|コーヒー豆300g/袋 |300 |g

のように作成し、
T_使用量の「材料と単位の組み合わせ」が、T_原材料の「材料と単位の組み合わせ」に存在しない場合、T_使用量の使用量を、「T_使用量の使用量にT_原材料の数量をかけあわせたもの」で表現することができれば実現できるものと愚考しております。

イメージとしては、
IF T_使用量.(材料&単位)<>T_原材料.(材料&単位) THEN T_使用量.使用量 = T_使用量.使用量 * T_原材料.数量

のような感じです、
IIF関数などでも実現できるのかなと考えたのですが、うまくいかず苦慮しております。
SQLに不慣れなものでして、ACCESSのSQLでこのようなことを実現する場合に、スマートな書き方があればご教示いただけると幸いです。

SELECT 日付,材料,(IF T_使用量.(材料&単位)<>T_原材料.(材料&単位) THEN T_使用量.使用量 = T_使用量.使用量 * T_原材料.数量),(IF T_使用量.(材料&単位)<>T_原材料.(材料&単位) THEN T_使用量.単位 = T_原材料.単位)
'FROM 使用量

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

現状のテーブル設計を見直した方がいいとは思いますが、
現状のままなら、下記のSQLでどうでしょう。

sql

1SELECT T_使用量.*, 2 IIf([T_使用量].[単位]=[T_原材料].[単位],[T_使用量].[使用量],[T_原材料].[数量]*[T_使用量].[使用量]) AS 使用量1, 3 IIf([T_使用量].[単位]=[T_原材料].[単位],[T_使用量].[単位],[T_原材料].[単位]) AS 単位1 4FROM T_使用量 LEFT JOIN T_原材料 ON T_使用量.材料 = T_原材料.材料;

投稿2022/04/23 03:41

hatena19

総合スコア33699

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

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

Haiji

2022/04/23 23:23

IIFの使い方までわかりました。非常に丁寧にわかりやすくご教示いただきましてまことにありがとうございました!
guest

0

テーブル設計の基本中の基本ですが、

引用テキスト1つの列には同じ系列の情報を1つしか持たせてはならない。

という掟があります。
それを守らないから重さの単位を換算しないと使えないのです。テーブル設計を直さないとパフォーマンスも保守性も悪いコードがどんどん増えます。

投稿2022/04/23 02:57

Orlofsky

総合スコア16415

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

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

Haiji

2022/04/23 23:26

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問