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

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

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

クエリでの抽出条件について クエリで納品がまだ済んでいない物件について、抽出期間を設定して抽出したいのですが、うまくいかず教えてください。 抽出したいフィールドは、[納品日]、[部署]、[変更]の三つです。 フィールド[変更]は、[納品日]が変更になることがあるので、[納品日変更]というフィールドに日付が入っていたら、[変更]に[納品日変更]の日付が入るように、[納品日変更]に何も入っていなかったら、[変更]に[納品日]の日付が入るように、判定式を入れています。 [変更]の動作は、目的通りになっており問題無いのですが、いざ[納品日]、[部署]、[変更]で抽出条件を入れるとうまくいきません。 抽出条件の所に [納品日]には、Is Null [部署]には、抽出したい部署名 [変更]には、Between #2010/04/01# And #2010/05/31# それぞれAndで組んで入れていますが、何も抽出されません。 [納品日]の、Is Null と [部署]の、抽出したい部署名 のふたつだけでやると、[納品日][部署]での抽出は動作します。 しかし、この二つに[変更]をプラスし、期間を追加するとダメなようです。 [変更]のように、判定式で作ったフィールドは、抽出条件に使ってはいけないのでしょうか? それとも抽出条件のAndは二つまでとか制限があるのでしょうか? 全く別の基本的な問題が原因だと思うのですが、教えて頂きたく。

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

  • ベストアンサー
  • 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

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

    「作表条件」というフォームにテキストボックスとして「日付1」、「日付2」を設置しています。 元のテーブルには「日付」という項目があり、「日付1」から「日付2」までのデータを抽出するため、 クエリの条件式に Between Nz([Forms]![作表条件]![日付1],#1800/01/01#) And Nz([Forms]![作表条件]![日付2],#9999/12/31#) と記述しています。 ただ、元のテーブルの日付がNULL値の場合があり、その場合「日付1」および「日付2」が空欄だとNULL値のレコードが抽出されません。 「日付」がNULLの場合でも抽出できるようにするには、どのようにすればよいでしょうか? どなたか教えてください。

  • アクセスのクエリでの抽出条件

    アクセスのクエリでの抽出条件で フィールド1とフィールド2とフィールド3 にデータがなければ1とフラグを立てるようにしたいのですが うまくいきません。 IIf([フィールド1]=Null and [フィールド2]=Null and [フィールド3]=Null,1,0) としてみたのですがうまくいきません。 ご指導お願い致します。

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

    Accessのクエリ 抽出条件について Accessクエリのフィールドに納品日、検収日、納期検収変更日があり、これらで抽出条件を設定したいのですが、どうしていいか判りません。 抽出条件等の例を画像添付しますので、どうように設定すれば良いか? 具体的に教えて頂けると助かります。 フォームにも同じ項目を作成しています。

  • Access 抽出クエリーについての条件

    先の投稿に重複しますが、 それぞれ異なるテーブルについて、 クエリーで、、 Between #5:00# And #19:00# Between 500 And 1900 上記の方法等で同じ数値ではなく、 期間に幅をもたせて一致としそれぞれの 一致データを抽出するクエリーは つくれますか? もちろん抽出対象のテーブル、列はそれぞれ同じ書式です。 > between関数を使って、 フィールドのデータ型が日付/時刻型の場合 抽出条件欄に、 > 5:00から19:00を抽出したい、 Between #5:00# And #19:00# > 5:00から25:00を抽出したい、 Between #5:00# And #23:59# OR Between #0:00# And #1:00# Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。 > また上記がテキストだった場合も、 > 500から1900を抽出したい フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、 フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、 Between 500 And 1900 と設定します。 通報する

  • クエリの抽出条件

    アクセス2003/2007のクエリの抽出条件について テーブル名:履歴 フィールド1:名前 フィールド2:履歴No フィールド3:履歴の内容 フィールド4:日付 とあります。 履歴Noは0の人、1~3まである人、1~10まである人と様々。 指定した名前毎に「履歴Noの最大値から3レコードを抽出してレポートにしたいです。 下記のようにしてみました。 Between Val(DMax("履歴No","履歴"))-2 And Val(DMax("履歴No","履歴")) これでは抽出出来ませんでした。 試しに Between 3-2 And DMax("履歴No","履歴") と直接引き算の式を入れると抽出されました。 ※Valはあってもなくても同じでした。 「履歴Noの最大値から3レコードを抽出」をうまく出来る方法は無いでしょうか。 よろしくお願いします。

  • クエリの抽出条件で困っています

    Access2007にて、クエリの抽出条件に下記を指定していますが、データが1件も抽出されません。 ※エラーは表示されません IIf([forms]![F_Home]![アンケート種別]="1級",1 Or Is Null,2 Or Is Null) この抽出条件をしているフォールドには"1"、"2"、nullのデータしか存在しません。 「アンケート種別」が"1級"の場合は、"1"とnullのデータをかえし、 それ以外の「アンケート種別」の場合は、"2"とnullのデータをかえしたいと思っています。 どのように条件を指定すれば、データを抽出できるようになるでしょうか。 宜しくお願い致します。

  • Accessで任意のテーブルのフィールド値をクエリの抽出条件にできますか?

    Accessで任意のテーブルのフィールド値をクエリの抽出条件にできますか? 工程管理のAccessDBがあり、毎日更新される工程を管理するため、数種類の選択クエリを作成しています。 そのクエリからExcelのデータベースクエリを使ってExcelシートにクエリ毎に各シートに取り込んでいます。 Accessクエリは不定期で抽出条件を変更しています。 抽出条件はどのクエリでも同時に同じものを使うところが多いため、任意に入力した値を抽出条件に指定できれば、一度で全クエリの抽出条件を変更できるのではないかと考えています。 色々調べてもフォームを使った方法は紹介されていますが、上記の条件下でいい方法はないでしょうか? 抽出条件は『Is Null Or >#2008/06/30#』のような感じです。

  • ACCESS2003 クエリの抽出条件

    宜しくお願いします。 フィールド A A B B 1 セレナ ステップワゴン ・ ・ とあります。 抽出条件にてIS NOT NULLにすると空白以外表示されます。 セレナ以外の場合、IS NOT "セレナ"にするとセレナ以外になります。 クエリを実行する際、空白以外、セレナ以外、Aのみ、と一度で入力し、表示させたいのですが、どのようにすればよいでしょうか。 抽出条件を[抽出条件を入れてください]とし、 実行ボタンを押し、IS NOT NULLやNOT LIKE "セレナ"といれても何も表示されません。

  • 不一致クエリでnullまで抽出されてしまいます

    質問です。 現在、accessにて不一致クエリを使用し、テーブルAをチェックし、 マスタテーブルに無い情報が書かれてしまっているフィールドがある場合 抽出して確認をする、というクエリを作りたいと考えています。 不一致クエリにて自動で入る「is null」を使用すると マスタテーブルに無い事が書いてあるレコードは抽出するのですが (逆になぜis nullで相違するレコードが抽出されるのか理解に苦しんでもいるのですが) is nullですので、nullのレコードも抽出されてしまいます。 抽出条件として、マスタテーブルと相違するもの&nullは抽出しない、としたいのですがお知恵を拝借出来ませんでしょうか。 よろしくお願いいたします。

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

    クエリを作ろうと考えています。 複数あるフィールドの中に、2つの日付フィールドA,Bとあり、 AよりBの日付が前だった場合を抽出したいと考えているのですが、 どなたかご教授いただければと思います。

専門家に質問してみよう