OS WIN7
ACCESS 2007使用です。

クエリーの抽出条件について何ですが、テーブルにコードというフィールドがありまして、そこには数値が入力されています。

コード








このテーブルを元に選択クエリーを作りたいのですが、条件としてコードの値に2と3両方がある場合、2のレコードだけを表示せず、どちらか一方の数値だけの場合またはどちらもない場合は、全てのレコードを表示するようにしたいのです。

抽出条件はどのように書けばよいのでしょうか?

いろいろ試したのですが、うまくいきません。

どなたかお助け下さい。

A 回答 (2件)

条件がいろいろ書かれていますが、


要は
・コード 3 が存在すれば 2以外を抽出
・コード 3 が存在しなけば すべてを抽出
この2つのみですね。

クエリデザインでフィールドを2個追加。

フィールド:コード  |DLookUp("コード","テーブル名","コード=3")
 テーブル:テーブル名|
   表示:オフ   |オフ
 抽出条件:<>2    |Is Not Null
  または:     |Is Null
    • good
    • 0
この回答へのお礼

ありがとうございます。

ばっちりできました。

久しぶりにアクセスを使うと、いろんなことを忘れてるもんですねえ。

お礼日時:2011/04/28 19:12

むりやりSQL考えてみました


もっといい方法あるかもしれませんが。

SELECT コード
FROM TABLE_A
WHERE (
NOT EXISTS ( SELECT * FROM TABLE_A WHERE コード =2)
OR
NOT EXISTS ( SELECT * FROM TABLE_A WHERE コード =3)
)
OR
(
EXISTS ( SELECT * FROM TABLE_A WHERE コード =2)
AND
EXISTS ( SELECT * FROM TABLE_A WHERE コード =3)
AND
コード <> 2
)
;


Where句の説明

(コードが2のレコードがないか、コードが3のレコードがない場合は(両方存在しない場合も含め)
それ以外の条件はなし)
または
(コードが2のレコードが存在し、コードが3のレコードが存在する場合は、
さらにコードが2以外のレコード)


といったかんじですかね
    • good
    • 0
この回答へのお礼

コードまで書いていただきましてありがとうございます。

SQLの記述は苦手なもんで、非常に勉強になります。

お礼日時:2011/04/28 19:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcel関数(カウントのかつ条件)

初歩的な質問ですがお願いします。
以下のようなexcelデータを計算条件でカウントする時の関数の書式を教えてください。

計算条件
コードが"1"かつ部門が"人事"のカウント
コードが"1"かつ部門が"経理"のカウント
    :
    :

コード  部門  名前  
1    人事  佐藤
1    人事  鈴木
1    経理  本田
2    人事  松田
2    経理  豊田
3    経理  住友

Aベストアンサー

過去に 似たような質問がありました。


=SUM(IF($A$2:$A$7=1,IF($B$2:$B$7="人事",1,0),0))
とやればいいでしょう。
なお、コードが A1から始まることを前提とします。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=401189

QACCESSのクエリー抽出条件にIIFを使用して

コンボボックスの値を抽出条件にしたクエリーを作成しています。
コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、
以下の式を入れたのですが全表示がされません。

IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])

Like "*" の部分がいけないのでしょうか?
(偽の場合は選択した値のレコードが抽出されます)

どなたか教えてください、よろしくお願いいたします。

Aベストアンサー

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にしてください。
(3)IIfを入力したフィールドの「抽出条件」に True と入力します。
 (Trueの囲い文字はいりません。)

どうでしょう?ちゃんと出ますよね・・・?
ただし、フィールドを作ったわけですから、
クエリのデータシートビューには必要のない、-1などが表示されたフィールドが表示されますよね。
これは、デザインビューに戻って、表示のチェックボックスをオフにすれば解決します。

IIFというのは、ExcelのIF関数とはちょっとイメージが違います。
以下解説↓

今回の条件式の部分には、[コンボ]="ALL"という評価式(←ポイント!)が入力されています。
Excelでは条件式というイメージが強いですが、
IIFは評価式という意味です。
つまり、この評価式自体がTrueとFalseを持つということです。
IIf([Forms]![テーブル名]![コンボボックス名]="ALL",・・・・)という式で、
条件をALLとしたら・・・
評価結果=True となります。
そして真の場合の処理にTrueを指定することで、IIFの戻り値がTrueになります。
条件にALL以外を入力すると・・・
評価結果=False となります。
そして偽の場合の処理の戻り値が、ALL以外の条件になります。
抽出条件にもTrueを入力したのは、無条件に全件が表示されるのを防ぐためです。

これは、表示をオンにして動作確認すると分かりやすいかも知れませんね。
または、とりあえず現象を直して、理解は後々・・・でもよいかも知れません。
健闘を祈ります!

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])
この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にして...続きを読む

Qexcelの表を複数条件でカウントして表示したい

EXCELのシート入力した表を、複数条件でカウントして、
別のシートに表示したいと考えています。

データの表をつくってカウントするのですが、

項目1 項目2 項目3
B   1   あ
B   2   う
C   1   う
B   2   き

このような表の場合、
項目1=B
項目2=2
という二つの条件で、
レコードを数をカウントすることは可能でしょうか?
本来は、2がかえってくるはずなのですが・・・。

ご存じの方、アイデアをお教えください。

Aベストアンサー

SUMPRODUCT 関数
 (A1:A6="B")かつ(B1:B6=2)の条件を満たす「行」数を求める。
仮に データーが、1~6行の範囲で入っているなら、
=SUMPRODUCT((A1:A6="B")*(B1:B6=2))

この場合の「*」は論理積演算。

過去にも、同様な質問が出ているので、 SUMPRODUCT  で検索願います。

QACCESSクエリーについて(条件抽出等3差分)

こちらのクエリーを活用して経過日数を算出しているのですが、

http://oshiete.goo.ne.jp/qa/8769213.html


(SQL構文)

SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数
FROM テーブル
GROUP BY テーブル.ID;

パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。








エクセル上で同じ日付-日付の経過日数でみると、エクセルの方が1多いのですが、これはエクセルが誤りでしょうか。



クエリー: 2014/09/27でパラメーターを指定  2014/05/13 が直近日付 = 137



エクセル: 2014/09/27とセルに入力 そこから右記のセルを引く 2014/05/13 が直近日付 = 136

こちらのクエリーを活用して経過日数を算出しているのですが、

http://oshiete.goo.ne.jp/qa/8769213.html


(SQL構文)

SELECT テーブル.ID, Max(テーブル.利用日) AS 直近利用日, Max(テーブル.利用回数) AS 利用回数, Sum(テーブル.利用金額) AS 利用金額合計, Min(DateDiff("d",[利用日],DateValue([yyyymmdd]))) AS 経過日数
FROM テーブル
GROUP BY テーブル.ID;

パラメータのyyyymmddには「2013/12/10」のように、区切り記号付きの日付を入力。








エクセル上で同じ日付-日付の経過日数でみると、...続きを読む

Aベストアンサー

> エクセルの方が1多いのですが、エクセルが誤りでしょうか。
いいえ。「関数の仕様が異なる」です。fの数も違うし。

参考URL:http://www.office-kitami.com/lesson/afunction/datediff.html

QExcel2007 複数条件の行数カウントできないでしょうが??

下のような条件の表の中で1の列が、1で始まり2の列がAから始まり、しかも3の列が10以上のような行数をカウントする事は、出来ないでしょうか?
出来れば、これを自動計算で各条件ごとに別シートにカウント表示したいのですが・・・

   1   2   3
A  30  AB   5
B  12  AA   5
C  12  BC   10
D  25  BB   15
E  25  AC   10
F   ・   ・   ・
G   ・   ・   ・
H   ・   ・   ・

Excel初心者なので詳しく説明いただければ助かります。m(__)m

Aベストアンサー

以下のURLを参考にしてみてください。

  http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/count.htm

SUMPRODUCT関数を使えばいいかと思います。

なお、文字列がAから始まるということを条件式で表せば、"=A*" となります。この場合の「 * 」はワイルドカードと呼ばれ、何かしらの文字列を意味します。つまり、"=A*" ならば先頭がAで始まる文字列を意味します。

Q【Access2000】月末の日付を条件にクエリーから抽出する方法

フォーム[フォーム1]にある[年月日]フィールド(非連結)に入力されたデータをもとにして、そのデータの末日より以前、という条件で抽出を行いたいと思います。クエリーの抽出条件には以下の式を採用しました。

<=DateValue(Year([Forms]![フォーム1].[年月日]) & "/" & (Month([Forms]![フォーム1].[年月日]))+1 & "/" & 1)-1

この式を使用すると、確かに月末は出るのですが、12月の時にエラーになってしまいます。原因も12月で1を足すと、13になるのでおかしくなるのでは?と特定できているのですが、どう回避すれば良いのかわかりません。何か方法がありましたら、お教えくださいませ!!宜しくお願いいたします。

ちなみにOSはWindows2000を使用しています。

Aベストアンサー

こんにちは。maruru01です。

DateSerial関数とDataAdd関数を使えばうまく行きます。


<= DateSerial(Year(DateAdd("m", 1, [Forms]![フォーム1].[年月日])), Month(DateAdd("m", 1, [Forms]![フォーム1].[年月日])), 1) - 1


DateValueの引数に日付文字列を作って入れるより簡単だと思います。

QExcel関数で複数条件のカウント

Excelの関数を使用して、
ふたつの条件を満たしている行をカウントしたいです。
<例>
(1)A列に○がついている
(2)B列に×がない

よろしくお願いします。

Aベストアンサー

配列数式
{=SUM((A1:A100="○")*(B1:B100<>"×"))}

QACCESS クエリー 抽出条件が多い場合

アクセス初心者です。(2003です)
商品コードのテーブルから、
32個のキーワードを含むものを抽出したいです。
商品コードの中のキーワードの位置は
先頭や最後など決まりはなく、バラバラです。

クエリの抽出条件の欄が9個しかないので、
9個ずつバラバラにクエリを作ってみました。
*02S*
*05F*
...
...
というふうに条件を並べています。

この3つのクエリ結果を
エクセルに出してはっつけて1枚のマスターに
しようかと思っていますが…
かなり手作り感があふれていて…(^^;)汗汗
もうちょっと単純な方法はないでしょうか?

また、なんだか心配なので
エクセルでテーブルをフィルタにかけ
キーワードを一個ずつ抽出してみましたが
アクセスで出た結果と違います…。(エクセルのが少ないです)
重複するキーワードがあるからかと思い
ピボットで見ても、重複は4件しかありません。
クエリを分けているからでしょうか?
どっちが正しいのでしょうか?
自分の作ったデータにまったく信頼が持てません。。。(--;)

これを出さないと退社できないのですが
チーム内に誰もいないので困っております。
助っ人お願い致しますm(__)m

アクセス初心者です。(2003です)
商品コードのテーブルから、
32個のキーワードを含むものを抽出したいです。
商品コードの中のキーワードの位置は
先頭や最後など決まりはなく、バラバラです。

クエリの抽出条件の欄が9個しかないので、
9個ずつバラバラにクエリを作ってみました。
*02S*
*05F*
...
...
というふうに条件を並べています。

この3つのクエリ結果を
エクセルに出してはっつけて1枚のマスターに
しようかと思っていますが…
かなり手作り感があふれていて…(^^;)汗汗
もうちょ...続きを読む

Aベストアンサー

9行は 
(カーソルをあてて)
挿入



でふやせます

----------------------------------
参考まで
わたしはあいまい検索には
Like命令を使っています(* 使用 )

Q【EXCEL】複数の条件でのカウント

EXCELで、複数(2つ)の条件でカウントしたいです。
下記のようなリストから、
「"関東・男"が○名」「"関東・女"が○名」・・・というように
カウントしたいのですが、どのような関数でできますか?
同じような質問がいくつもあるのは承知なのですが、
参考にしても答えが出せなかったので、質問させていただきました。
よろしくお願いいたします。


所在地 性別
関東  男
関東  男
関東  女
関西  男
関西  女
関西  女
関東  女
関東  男
関東  女
関西  男

Aベストアンサー

1.データのピボットテーブルで所在地と性別を列にして
性別をデータの個数として集計させる。

2.Excel2007であればCOUNTIFS関数を使用
=COUNTIFS(A:A,"関東",B:B,"男")

3.SUMPRODUCT関数を使用
=SUMORODUCT(($A$1:$A$100="関東")*($B$1:$B$100="男"))

4.配列数式を使用
=SUM(IF(($A$1:$A$100="関東")*($B$1:$B$100="男"),1))
としてCtrl+Shift+Enterで配列数式に変換

5.C列を作業列にして
C2=A2&B2
で下方にコピー
=COUNTIF(C:C,"関東男")

QAccess 選択クエリーの抽出条件

Access2000を使っています。
選択クエリーの抽出条件にテーブルの値を設定することは可能でしょうか?
たとえば、テーブルAに対して、抽出条件をテーブルBのデータでコード番号 ”B*”(コード番号にBのつくもの)を抽出したいのですが・・・。
よろしくお願いします。

Aベストアンサー

In (Select [コード番号] From [テーブルB] Where Left([コード番号] ,1)= "B")

を、コード番号フィールドの抽出条件欄に記述してみてください。


人気Q&Aランキング

おすすめ情報