実現したいこと
以下の2つのテーブルがあります。
〇テーブルA(マスタテーブル)
・カラム1:認定番号(char型, 主キー)
・カラム2:種類(char型)
(サンプルデータ)
認定番号 | 種類 |
---|---|
NINTEI01 | TYPE01 |
NINTEI02 | TYPE02 |
NINTEI03 | TYPE03 |
〇テーブルB(トランザクションテーブル)
・カラム1:番号(char型, 主キー)
・カラム2:認定番号(char型, 外部キー)
・カラム3:判別フラグ(char型)
・カラム4:日時(date型)
(サンプルデータ)
番号 | 認定番号 | 判別フラグ | 日時 |
---|---|---|---|
0001 | NINTEI01 | - | 2020/01/01 12:34:56 |
0002 | NINTEI01 | - | 2020/01/02 00:00:00 |
0003 | NINTEI01 | - | 2020/01/02 00:00:00 |
0004 | NINTEI02 | - | 2020/01/01 12:34:56 |
0005 | NINTEI02 | - | 2020/01/02 00:00:00 |
0006 | NINTEI02 | - | 2020/01/02 00:00:00 |
0007 | NINTEI02 | x | 2020/01/03 00:00:00 |
0008 | NINTEI03 | x | 2020/01/01 12:34:56 |
0009 | NINTEI03 | x | 2020/01/02 00:00:00 |
0010 | NINTEI03 | x | 2020/01/02 00:00:00 |
これらについて、
認定番号をキーに、テーブルAをテーブルBに内部結合させ、以下の様なビューを作成したいです。
カラムは以下の通りです。
・カラム1:テーブルB.番号
・カラム2:テーブルB.認定番号
・カラム3:テーブルA.種類
・カラム4:テーブルB.判別フラグ
含まれるレコードは、下記の条件で、各認定番号ごとに1レコードずつです。
・同一認定番号で、判別フラグが"-"のレコードが存在すれば、その認定番号で判別フラグが"-"で日時が最新のもの…①
・同一認定番号で、判別フラグが"-"のレコードが存在しなければ、その認定番号で日時が最新のもの…②
・上記①, ②でレコードが複数存在する(同一日時)場合、①,②該当レコードのうち、テーブルB.番号が最大のもの
(サンプルデータ)
番号 | 認定番号 | 種類 | 判別フラグ |
---|---|---|---|
0003 | NINTEI01 | TYPE01 | - |
0006 | NINTEI02 | TYPE02 | - |
0010 | NINTEI03 | TYPE03 | x |
試したこと
未完成ですが、以下の様なSQLを試しました。
(クエリの実行は、VBA上でクエリ定義を行い、SQL文を定義、そのSQL文をクエリに適用し、OpenQueryで実行します。)
SELECT テーブルB.番号, テーブルB.認定番号, テーブルA.種類, テーブルB.判別フラグ, switch(テーブルB.判別フラグ = "-", dateadd("yyyy", 5000, テーブルB.日時), true, テーブルB.日時) as 重みづけ FROM テーブルB INNER JOIN テーブルA ON テーブルA.認定番号 = テーブルB.認定番号 ORDER BY テーブルB.認定番号, dateadd("yyyy", 5000, テーブルB.日時), true, テーブルB.日時) DESC
条件が日時と判別フラグの2つが存在するため、1カラムで判断できるdate型のカラム"重みづけ"を追加しています。(判別フラグに"-"が含まれれば、カラム"重みづけ"に5000年を追加)
("ORDER BY テーブルB.認定番号, dateadd("yyyy", 5000, テーブルB.日時), true, テーブルB.日時) DESC"としているので、各認定番号毎に最初の1レコードずつをビューに表示させれば所望のビューになります。)
ここから、
重みづけを順位に変換した、カラム"順位"を用意し、"順位" = 1 のみ取得しようと考え、
dcount関数を用いることを検討しましたが、結合テーブルをテーブルとしてどのようにdcount関数の引数に渡せばよいかわからずにいます。
その他、よりスマートな方法を含め、良い方法はありますでしょうか。
以上、宜しくお願い致します。
補足情報(FW/ツールのバージョンなど)
OS : Windows10 Professional(x64)
Access : バージョン1803(Office 365)
回答2件
あなたの回答
tips
プレビュー