• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数フィールドからの抽出(ACCESS)その2)

複数フィールドからの抽出方法に関する質問

このQ&Aのポイント
  • QNo.3555150の関連ですが、複数フィールドからの抽出方法について質問があります。
  • 対応日フィールドにおいて、日付の入力順序にこだわらず、最終対応日に日付をシフトする方法はあるのでしょうか?
  • 最終対応日のみに日付が入っているレコードについては、そのままにしておきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

式の組み立て方の考え方は正しいです。ただ、 IIF(式A, 出力B, 出力C) という形を変えてはいけません(括弧の位置と数)。 入れ子構造にするには、 IIF(式A1, 出力B1, IIF(式A2, 出力B2, 出力C2)) となります。(始めの IIF の括弧の数が多いようです。おしいですね!!) >尚、1行目の最終対応日の日付は既入力データです。 とうことであれば、式は、 IIF([最終対応日]>0, ~ から始めることになります。

miffy123
質問者

お礼

irija_bariさん。 miffyです。(朝早くからの御回答有難うございます) 作り直して以下のように記述しました。 SELECT IIF([最終対応日]>0,[最終対応日],IIF([対応日(4)]>0,[対応日(4)],IIF([対応日(3)]>0,[対応日(3)],IIF([対応日(2)]>0,[対応日(2)],IIF([対応日(1)]>0,[対応日(1)],[0]))))) AS 最終対応日 FROM 対応日; 今度は保存してもエラーは出なくなりました。 しかしながら、実行すると”SELECTで指定されてる別名'最終対応日'が循環参照を発生させています”と出ます。 これはどういうことなのでしょうか?

その他の回答 (2)

回答No.3

>しかしながら、実行すると”SELECTで指定されてる別名'最終対応日'が循環参照を発生させています”と出ます。 [最終対応日] を [対応日].[最終対応日] と書き換えてみてください。 (余計なお世話かもしれませんが、エラー対処などでわからないことが あったら Web などで調べる習慣を付けると良いですよ。 今回なら、「access, 循環参照を発生させています」などのキーワードで 検索します。) また、 > IIF([対応日(1)]>0,[対応日(1)],[0]) の最後の [0] は数値なので 0 と書くべきです。これだと、「すべて未入力 なら、0 という値にしなさい」という式になるのですが、それでよろしいの でしょうか?

miffy123
質問者

お礼

irija_bariさん。 書き換えたら今度はうまくいきました。 ・対応日(1)~対応日(4)が全て未入力→最終対応日は0 ・対応日(1)~対応日(4)が全て未入力、かつ最終対応日が既入力  →最終対応日はそのまま 最終対応日に既データがあるレコードには、ちゃんとデータが入ってました。 (^人^)感謝っっ♪

回答No.1

QNo.3555150 を拝見しました。 今回は VBA を使わなくてもできるので、クエリを使用します。 1. クエリを作成して、「SQL ビュー」を開きます(「デザイン ビュー」で   開いて、タイトル バーを右クリック「SQL ビュー」)。 2. SQL 文を入力します。(テーブル名は「テーブル1」だとします。) SELECT IIF([対応日(4)]>0,[対応日(4)],[対応日(3)]) AS 最終対応日 FROM テーブル1; 対応日(4)が 0(=未入力)でなければ対応日(4)を出力、0 ならば 対応日(3)を出力するという意味です。 IIF を入れ子構造にする(今回なら、対応日(3)のところにさらに IIF を 入れていく)ことで、ご要望のものができると思います。 1 行目の 未入力   未入力  未入力   未入力    5日 は、どこから最終対応日を持ってきたのでしょうか? 5日    未入力  未入力   未入力    5日 の誤りと判断しました。

miffy123
質問者

お礼

irija_bariさん。 miffyです。お返事有難うございます。 関数の不得手でよく理解できてないのですが、入れ子構造で以下のようにSQL文を記述したところ、構文エラー”演算子がありません”と表示されました。基本的に分かっていないもので恐縮ですが、どこがおかしいのでしょうか? SELECT IIF((([対応日(4)]>0,[対応日(4)],IIF([対応日(3)]>0,[対応日(3)],IIF([対応日(2)]>0,[対応日(2)],IIF([対応日(1)]>0,[対応日(1)],[最終対応日]))) AS 最終対応日 FROM 対応日; 尚、1行目の最終対応日の日付は既入力データです。 説明不足で申し訳ありません。

関連するQ&A