• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クエリでの抽出条件について)

クエリでの抽出条件について

このQ&Aのポイント
  • クエリでの抽出条件について、納品がまだ済んでいない物件を抽出するために、[納品日]、[部署]、[変更]の抽出条件を設定しています。
  • しかし、[変更]のように判定式で作ったフィールドは抽出条件に使えないため、[納品日]と[部署]の抽出条件のみでは動作しています。
  • また、[納品日]と[部署]の抽出条件に[変更]の期間を追加すると抽出されない問題が発生しています。原因について教えてください。

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

  • ベストアンサー
  • layy
  • ベストアンサー率23% (292/1222)
回答No.7

納品日にデータあれば納品日、ただし変更されていればその納品日変更分で抽出というのであれば前回答の指摘にある納品日をNULL抽出させている条件が怪しいです。NULL以外に修正して下さい。納品日変更以外はうまくいったというのも見直す必要あります。

jyurymicke
質問者

お礼

出来ました。!! Nullがダメだったようです。 本当にありがとうございました。 たすかりました。

その他の回答 (6)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

納品日と部署のクエリがうまく出来ているので、それと別にその結果から変更だけ判定のクエリと2段階で実施すると期待している結果は出るはずです。 本来の1つのクエリ、での原因は上記の結果でヒントが見えると思います。 納品日変更には今何も値が無いですか?、そんな気がします。納品日変更のIF文編集された結果でBETWEEN抽出条件が実行されてない、と思っています。 クエリで納品日の右側に納品日変更を用意してますよね?。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.5

> [変更]のように、判定式で作ったフィールドは、抽出条件に使ってはいけないのでしょうか? そのクエリをSQLビューで見た時、WHERE の [変更] 部分はどうなっているのでしょうか。 IIf([納品変更日] Is Null,[納品日],[納品変更日]) Between #4/1/2010# And #5/31/2010# なら大丈夫なような気がします。 > [納品日]が変更になることがあるので、[納品日変更]というフィールド・・・ や > 納品日に対する抽出条件Between #2010/04/01# And #2010/05/31#はキチンと動作していることは確認しています。 からは、[納品日]が埋められている(設定されている)ように読み取れもしますが、 抽出条件のところに、 > [納品日]には、Is Null を書くことがあるのかな??? [納品日]が埋められていて、And なら、0 件だよね ??? > ・・・のふたつだけでやると、[納品日][部署]での抽出は動作します。 ということなら、期間を指定する必要はなさそうだし・・・ [納品日]、[納品日変更]がどのような設定になっているかで、回答は変わってくると思います。 この辺りを補足されると、回答が得られやすくなると思います。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

(1)IIf([納品変更日] Is Null,・・・・・ (2)IIf([納品変更日]="",・・・・・・・ (3)IIf(LEN([納品変更日]) =0,・・・・ どれも見た目何も入っていない項目に対しての判定です。 やっている(1)だけでは不十分なのかもしれないので、 これらを試してみましょう、ということです。 組み込みは、これらそのまま貼り付けずに、全角半角やら体裁を整えてからお願いします。 「納品日」項目に対して Between #2010/04/01# And #2010/05/31# の条件を行ったとき成立しますか。 それなら「納品日」項目に対しての動きは問題ないということになると思われます。

jyurymicke
質問者

補足

はい、組み込みは手入力で確実に入力しました。 納品日に対する抽出条件Between #2010/04/01# And #2010/05/31#はキチンと動作していることは確認しています。 [変更]はキチンと動作しているが、[変更]がおかしいという事になりますか?

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

>[変更]にはきちんと私が望む様に、日付ははいっているのですが、 >変更:IIf([納品変更日] Is Null,[納品日],[納品変更日]) >の式が原因の気がします。 データが原因なのか式が原因なのかはっきりさせないといけないのですが、 [納品変更日] をそのまま出力させる項目と 判定:IIf([納品変更日] Is Null,[納品日],IIf([納品変更日]="",[納品日],IIf(LEN([納品変更日]) =0,[納品日],[納品変更日]))) と、 ここまでチェックしてみてどうでしょうか。 この3種類の判定条件をそれぞれ別項目で判断してどれを適用したら良いか。 こういうところから見るくらいでしょうか。

jyurymicke
質問者

補足

ありがとうございます。 教えて頂いた式を入れた判定フィールドを追加してみました。 納品変更日が入っているレコードは、判定が#エラーとなりました。その他は、キチンと納品日が入力されました。 納品変更日2のフィールドを追加し、納品変更日を出力しましたが、キトンと納品変更日は出力されています。 この結果から、どう進めていったら良いでしょうか?

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

こちらで確認した中では、原因として2パターンが考え得るようです。 a)[変更]のデータ型が日付/時刻型以外の場合、そのままでは  「Between A And B」の形では抽出できません。  この形で抽出条件を指定するためには、   ・テーブルのデザインビューで[変更]フィールドのデータ型を変更、   ・CDate関数でデータ型を変換したフィールドに抽出条件を指定、  といった方法を採ります。 <クエリのデザインビューでCDate関数を使用して変換する場合>  【現在】   『フィールド:』欄 変更   『テーブル:』欄  (テーブル名)  【修正】   『フィールド:』 欄 変更日: CDate([変更])   『テーブル:』欄  (空白のまま) b)Accessのヘルプには、以下のような記述があります:  http://office.microsoft.com/ja-jp/access/HP010322871041.aspx?pid=CH010410321041 > 引数 criteria に日付リテラルを指定する場合は、日本語版の Microsoft Jet > データベース エンジンであっても米国形式で指定する必要があります。 > たとえば、1996 年 5 月 10 日を指定する場合は、「5/10/96」のように米国 > 形式で表します。 ですので、[変更]の抽出条件を、以下のようにしてみて下さい:  Between #04/01/2010# And #05/31/2010# 【余談】 こちらで検証した中では、クエリのデザインビューでは「#2010/05/31#」の形で 指定しても、問題なく抽出される場合がありました。 ただ、これで抽出が正しく行われるパターンの場合は、SQLビューに切り替えると 日付の抽出条件も自動で「#5/31/2010#」に切り替わる(デザインビューに戻す と元に戻る)、という結果になりました。 一方、抽出されないクエリをSQLビューに切り替えると、抽出条件はクエリで指定 したのと同じ「#2010/05/31#」の形となっていました。 この、自動で変換されたりされなかったりする現象の再現条件については、残念 ながら確認できていません(汗)

回答No.1

Access だと思いますので試しにやってみましたが下記のSQL文で動作しました。 テーブル名はテーブル1となっています。 SELECT テーブル1.* FROM テーブル1 WHERE (納品日 Is Null) AND (部署="製造部") AND (変更 Between #2010/04/01# And #2010/05/31#); 特別問題のある使い方ではないと思いますが・・・

jyurymicke
質問者

補足

早速、お返事ありがとうございます。 私も問題無いと思うのですが・・。 以下の[変更]の式でもう一度そちらで試して貰えますか? [変更]を 変更:IIf([納品変更日] Is Null,[納品日],[納品変更日]) [納品変更日]が空なら[変更]に[納品日]を、空でなければ[変更]に[納品変更日]という内容です。 [変更]にはきちんと私が望む様に、日付ははいっているのですが、 変更:IIf([納品変更日] Is Null,[納品日],[納品変更日]) の式が原因の気がします。 上記のような変更でも同じSQL文でそちらでも動作しますでしょうか? [変更]を上記式でなく、直接日付を入れてやると上記SQL文で動作することは先ほど確認しました。 [変更]を式としている時だけ、抽出が出来ない感じです。

関連するQ&A

専門家に質問してみよう