住所録データベース
広報と図書の発送用データベースに手を入れた。Accessのデータベースになっていて、今までは博物館、研究機関、広報先などのテーブルに分割されていた。それをユニオンクエリで一つにまとめ、ラベルを刷ったりしていた。
しかし、ユニオンクエリだとSQLを書かないといけない、データを直接更新できず、元のデータベースを更新しないといけないなど、扱いにくい。
そこで、分割されていたテーブルを一まとめにした住所録テーブルを作成し、広報用クエリ、研究報告発送用クエリなどの目的別の選択クエリを作成した。そこまではよかったんだけど、ユニオンクエリでできていたことが選択クエリだとできない。
今までユニオンクエリで(記憶に頼っているので間違ってるかも)
SELECT "01. 学校" as 区分, 住所, 施設名 from ... UNION SELECT "02. 博物館", 住所, 施設名 from ... UNION SELECT "03. 研究機関", 住所, 施設名 from ...
のように、抽出条件ごとに「区分」という列を作って、それをもとにソートしていた。
選択クエリで同じようにするには、住所録テーブルに「区分」という列をつくるしかないのだろうか。WHERE句の中で、ある条件ごとに変数「区分」に値を代入する、みたいなことはできないのかな。
追記(5月3日)
switch関数を使ってできた(参考)。デザインビューで空白のフィールドを右クリック、ズームを選択して
switch([大分類]="学校", "01. 学校", [中分類]="国内博物館", "02. 博物館", [中分類]="国内研究機関", "03. 研究機関")
のように記述。ところが、条件をいろいろ書き加えていったら「複雑すぎます」というエラーになってしまった。そこで、switchをネストした。
switch([大分類]="学校", "01. 学校", [大分類]="国内施設" & [中分類]="博物館", "02. 国内博物館", [大分類]="国内施設" & [中分類]="研究機関", "03. 国内研究機関", TURE, switch([大分類]="国外施設" & [中分類]="博物館", "04. 国外博物館", [大分類]="国外施設" & [中分類]="研究機関", "05. 国外研究機関"))
これで一応は希望のことができたのだが、こんなぐちゃぐちゃした関数を書くのなら、ユニオンクエリの複雑なSQLと大差はないような。