Microsoft Access 掲示板

データベースの行内での最大値算出につきまして

5 コメント
views
4 フォロー

下記のような運用を考えています。
A1~3、B1~3を各々引き算し、「差が100以下になる最大のAとBを返す」
という事をしたく、質問させていただきました。

ID A1 A2 A3 B1 B2 B3
1 1500 1400 1200 1700 1800 1300
2 1750 1522 1477 1500 1400 1300
3 1254 1322 1955 1100 1500 2100

情報量が多く、できればaccessだけでの運用を考えているのですが、
何か方法はございますでしょうか。
よろしくお願いいたします。

白絹
作成: 2020/10/05 (月) 08:43:54
通報 ...
1
kitasue 2020/10/05 (月) 16:30:13 d057a@e9d43

ID=3では、差が100以下にならないのでは。

2

kitasue様、
御返事ありがとうございます。一例で入力したため、数値を良く確認しておりませんでした。
100以下にならない場合はエラーを返してほしいなと…
エクセルでやれと言われそうですが何卒宜しくお願い致します。

3
kitasue 2020/10/06 (火) 09:20:54 d057a@e9d43

ごめんなさい。エラーは返さずオミットしてしまいますが、以下でどうでしょうか。
テーブル「tblSeq」を追加します。フィールドは、「SEQ」一つで内容は、

SEQ

1
2
3
の3レコードです、その上で、

SELECT
	ID,
	Max(Choose([tblA].[SEQ],[A1],[A2],[A3])) AS Max_A,
	Max(Choose([tblB].[SEQ],[B1],[B2],[B3])) AS Max_B
FROM
	テーブル名,
	tblSeq AS tblA,
	tblSeq AS tblB
WHERE
	Abs(Choose([tblA].[SEQ],[A1],[A2],[A3])-Choose([tblB].[SEQ],[B1],[B2],[B3]))<=100
GROUP BY
	ID;

のSQLで行内のAの最大値とBの最大値を出力します。

4
kitasue 2020/10/06 (火) 13:27:09 d057a@e9d43

エラー出力ではなく、Null出力でよろしければ、先程のSQL文をクエリ「Q1」として登録して

SELECT
	テーブル名.ID,
	Max_A,
	Max_B
FROM
	テーブル名
LEFT JOIN
	Q1
ON
	テーブル名.ID = Q1.ID;

で、いかがでしょうか。

5
白絹 2020/10/07 (水) 12:23:44 89e3f@3f393

kitasue様
ご回答ありがとうございます。
上記内容で運用できそうです!

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