人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQL(Access使用)で下記のような事を実現したいのですが、コードが書けません。

名簿というテーブルに、電話番号の列をleftjoinしたいのですが、
名簿の携帯電話の列(携帯)に○が入っていれば、携帯電話のテーブルを参照し、
名簿の固定電話の列(固定)に○が入っていれば、固定電話のテーブルを参照し、
という条件でleftouterjoinを行い、
電話番号を引っ張ってきて、特定の1列に入れていきたいのです。

ちなみに、携帯と固定を両方保持している人はいない前提で構いません。

下記のように考えたのですが…当然有効ではありません。



SELECT 名簿.*,固定電話.電話番号
from 名簿
where 固定="○"
left outer join
固定電話
on 名簿.ID=固定電話.ID

union

SELECT 名簿.*,携帯電話.電話番号
from 名簿
where 携帯="○"
left outer join
携帯電話
on 名簿.ID=携帯電話.ID

何かいい方法はないでしょうか?


●質問者: 匿名質問者
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号
ベストアンサー

いくつか考えてみた。動かしてないけどね。
名簿.固定="○"の判定を先にやってるから両方持ってる場合は固定のほうになるよ。

SELECT 名簿.*, IIF( 名簿.固定="○", 固定電話.電話番号, IIF( 名簿.携帯="○", 携帯電話.電話番号, "" ) ) AS 電話番号
FROM (名簿
LEFT JOIN 固定電話 ON 固定電話.ID = 名簿.ID)
LEFT JOIN 携帯電話 ON 携帯電話.ID = 名簿.ID
SELECT *, IIF( 固定="○", DLOOKUP("電話番号", "固定電話", "ID=" & ID ), IIF( 携帯="○", DLOOKUP("電話番号", "携帯電話", "ID=" & ID ), "" ) ) AS 電話番号
FROM 名簿

匿名回答1号さんのコメント
回答のほう手直ししてます。

匿名質問者さんのコメント
遅くなってごめんなさい!そしてありがとうございます。 上のコードをやってみました。で、うまくいきました! しかし、コードを見てもなんとなくはわかるけど、 どうしてこれで動くのかはっきりと理解はできない… というレベルなので、追々勉強しなきゃ! 色々なアイデアをくれてありがとうございます。 DLOOKUPもこれから勉強します!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ