蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

住所録データベース

広報と図書の発送用データベースに手を入れた。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と大差はないような。