Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Access 2013)
クエリの特定の条件による新しいフィールドを作成するには
投稿日時: 17/05/17 01:23:43
投稿者: mm_111

クエリーで
1というフィールドに10の場合で、かつ、
2というフィールドに20がある場合
 
そのクエリーの右端に新しい項目列「new」を作成し
上記1020という数値を格納することがしたいのですが、
どのようにすればよろしいのでしょうか。
 
初心者ですみません。ご教授ください。

回答
投稿日時: 17/05/17 09:15:12
投稿者: sk

引用:
クエリーで
1というフィールドに10の場合で、かつ、
2というフィールドに20がある場合

(フィールドの名前を数字のみで構成するのはお奨めできませんが)
 
引用:
そのクエリーの右端に新しい項目列「new」を作成し
上記1020という数値を格納することがしたい

フィールド[1]の値が 10 であり、かつ
フィールド[2]の値が 20 であるレコードについては
1020 という数値を返し、上記の条件に該当しない
レコードについては Null を返す、という演算フィールドを
追加する場合は、以下のような式を用いればよろしいでしょう。
 
-----------------------------------------------------------
 
new: IIf([テーブル名].[1]=10 And [テーブル名].[2]=20,
         1020,
         Null)
 
-----------------------------------------------------------
(テーブル/フィールドの名前は適宜修正すること)
 
もしフィールド[1]とフィールド[2]の値の組み合わせが
上記の他にもいくつか存在し、それらの組み合わせによって
[new]に返すべき数値が異なるのであれば、
フィールド[1], [2], [new]のパターンを記録したテーブルを定義し、
[1], [2]を結合キーとして主テーブルと外部結合して、
フィールド[new]の値を表示するようになさった方がよろしいでしょう。

投稿日時: 17/05/17 22:38:10
投稿者: mm_111

skさま
わかりやすい詳細なご回答、感謝いたします。
外部結合のことも、ご回答いただき、ありがとうございます。
実際の項目名については、注意いたします。
 
new: IIf([テーブル名].[1]=10 And [テーブル名].[2]=20,
          1020,
          Null)
 
このような場合、条件が複数ある場合、下記のように記載しましたが、
簡略して記載する方法はありますでしょうか。
追記質問ですみませんが、ご教授お願いします。
 
new:
IIf([テーブル名].[1]=10 And [テーブル名].[2]=20, AA,
IIf([テーブル名].[1]=20 And [テーブル名].[2]=30, BB,
IIf([テーブル名].[1]=20 And [テーブル名].[2]=30, CC, )))
 
 
 

回答
投稿日時: 17/05/18 13:43:17
投稿者: sk

引用:
このような場合、条件が複数ある場合、下記のように記載しましたが、
簡略して記載する方法はありますでしょうか。

引用:
new:
IIf([テーブル名].[1]=10 And [テーブル名].[2]=20, AA,
IIf([テーブル名].[1]=20 And [テーブル名].[2]=30, BB,
IIf([テーブル名].[1]=20 And [テーブル名].[2]=30, CC, )))

IIf 関数の他に、Switch 関数を用いる方法が挙げられます。
 
-----------------------------------------------------------------
 
new: Switch([テーブル名].[1]=10 And [テーブル名].[2]=20, 1020,
            [テーブル名].[1]=20 And [テーブル名].[2]=30, 2000,
            [テーブル名].[1]=30 And [テーブル名].[2]=40, 3000,
            True, 0)
 
-----------------------------------------------------------------
 
フィールド[1]とフィールド[2]の条件の組み合わせが少なくなく、
また新しい組み合わせを追加する頻度が比較的高いのであれば、
既に申し上げた通り、それらの値の組み合わせを記録するための
テーブルを設けられた方がよいでしょう。
 
引用:
1というフィールドに10の場合で、かつ、
2というフィールドに20がある場合

引用:
1020という数値を格納

また、単にフィールド[1]の値とフィールド[2]の値を
文字列連結した結果を返したいだけなのであれば、
& 演算子を用いればよいでしょう。
 
-------------------------------------------------------------------
 
new: [テーブル名].[1] & [テーブル名].[2]
 
-------------------------------------------------------------------
(この場合、[new]は数値型のデータではなくテキスト型のデータを返す)

投稿日時: 17/05/19 03:38:23
投稿者: mm_111

skさま、おいそがしいところ、ありがとうございました。
Switchを使用することにより、対応させていただきました。
 
また、組み合わせ記録のテーブル作成も
大変勉強になりました。
 
わかりやすいご説明大変勉強になりました。