アクセスのSQLで

解決


てぇしぃ  2005-06-28 13:06:52  No: 90727  IP: [192.*.*.*]

アクセス2000の質問です。VBとは関係ないかもしれませんが、一応VBから制御するということでお願いします。2つテーブルがあり、Aテーブルには  ID ,Aコード  というフィールド。Bテーブルには  ID ,Bコード  というフィールドがあります。
IDでAテーブルとBテーブルがリンクされています。Aコード、Bコードともに文字列型です。IIF関数を使用してAコードが空白(NUll?)の場合にはBコードの値を表示するようにし,Aコードに何らかの値が入力されている場合はそのまま表示したいのです。
IIf([Aテーブル.Aコード] Is Null,[Bテーブル.Bコード],[Aテーブル.Aコード]))
としてみましたが、Aコードが空白の行だけが抽出されません。Is Nullの部分を="" としてみても結果は同じでした。
どうすればよいのでしょうか?

編集 削除
しなこ  2005-06-28 14:06:02  No: 90728  IP: [192.*.*.*]

IIf(IsNull([Aテーブル.Aコード])=True,[Bテーブル.Bコード],[Aテーブル.Aコード]))
って書いてみてはどうでしょう?

編集 削除
てぇしぃ  2005-06-28 14:14:36  No: 90729  IP: [192.*.*.*]

しなこさんありがとうございます。しかし残念ながら同じ結果になってしまいました。

編集 削除
いな  2005-06-28 14:17:20  No: 90730  IP: [192.*.*.*]

>VBとは関係ないかもしれませんが
かも、ではなく。今回の質問でいうならば全く関係ありません。
#一応、関係あるかもぉ〜、
#なんて誤解している可能性があるので念のためお断り

んでもって、さてと

>IIF関数を使用してAコードが空白(NUll?)の場合には
>Bコードの値を表示するようにし,
>Aコードに何らかの値が入力されている場合はそのまま表示したいのです。

IIf(ISNULL([Aテーブル.Aコード]),[Bテーブル.Bコード],[Aテーブル.Aコード]))

でわ?

編集 削除
いな  2005-06-28 14:19:27  No: 90731  IP: [192.*.*.*]

既に試されていたか...

じゃ、Trim付けてみよう!

IIf(ISNULL(Trim([Aテーブル.Aコード])),[Bテーブル.Bコード],[Aテーブル.Aコード]))

編集 削除
てぇしぃ  2005-06-28 14:40:02  No: 90732  IP: [192.*.*.*]

いなさんもありがとうございました。結果は同じでした。
1つ気になったのですが、
Aテーブル                    Bテーブル  
ID:1 Aコード:"001"        ID:1 Bコード:"ABC"
ID:2 Aコード:"001"        ID:2 Bコード:"CVT"
ID:3 Aコード:"002"        ID:3 Bコード:"ABC"
                            ID:4 Bコード:"ZZZ"

という感じでBにはあってAにはないIDが存在するのでうまく抽出できないのかもしれないと思ったりもします・・・・

編集 削除
しなこ  2005-06-28 15:06:35  No: 90733  IP: [192.*.*.*]

IDフィールドのリンクの張り方が違うのでは?

SELECT IIf([Aテーブル]![AID]="",[Bテーブル]![Bコード],[Aテーブル]![Aコード]) AS A
FROM Aテーブル RIGHT JOIN Bテーブル ON Aテーブル.AID = Bテーブル.BID;

こんなかんじでいかがでしょう?

編集 削除
てぇしぃ  2005-06-28 15:29:39  No: 90734  IP: [192.*.*.*]

しなこさんの言うとおりにリンク付けはしてあります。
でもうまくいきません。抽出条件をなしにするとちゃんと全てのデータが表示されますのでリンクの仕方に問題はないと思います。

やはりAコード、Bコードが文字列型だということが問題なのでしょうか?

編集 削除
もげ  2005-06-28 15:53:27  No: 90735  IP: [192.*.*.*]

貴殿がどういうSQLを書いているのかよくわかりませんが、

SELECT テーブルA.Aコード, テーブルB.Bコード, 
IIf([テーブルA].[Aコード] Is Null,[テーブルB].[Bコード],[テーブルA].[Aコード]) AS 式1
FROM テーブルA
 INNER JOIN テーブルB ON テーブルA.ID = テーブルB.ID;

と仮定して、

式1のところに、AコードがNullの場合だけBコードが表示されてればよいのでは?
であれば、抽出条件は関係ないですし、A、Bコードが文字列型でも関係ないし。
どうでしょう?

編集 削除
てぇしぃ  2005-06-28 16:00:07  No: 90736  IP: [192.*.*.*]

>もげさん  しなこさん、いなさん
ありがとうございます。簡単な問題でして、恥ずかしいのですが抽出条件の所に記入せずに式1のところに記入するんでした・・・ほんとありがとうございます。勉強しなおして精進しますだす。

編集 削除
てぇしぃ  2005-06-28 16:00:27  No: 90737  IP: [192.*.*.*]

解決っす

編集 削除