クエリーでカウントをしたときに、カウント結果がゼロの場合でも「0」と表示させたいのですが、良い方法は、ありませんでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

補足説明をお願いしていながら、メールに埋もれていて確認しておりませんでした。

ごめんなさい。

質問の内容は、テーブルAのフィールド?に「B」(Bコード?)がない場合0「ゼロ」を表示するということですね。

選択クエリで処理するのは無理だと思います。
選択クエリは、条件に合致するものを出力するからです。
    • good
    • 0

質問の内容が今一つイメージ出来ないので質問させて貰います。



ご質問のクエリとはクエリの新規作成でクロス集計クエリウィザードを使用してクエリを作成して、そのクエリを実行した場合(つまり、開く)に表の状態でカウント数が0の場合でも「0」と表示したいと言うことでしょうか?

適当なサンプルで説明して頂いた方が回答しやすいと思いますので補足説明をお願います。

この回答への補足

言葉たらずですみません。

選択クエリーで、「集計」のカウントを使った場合、例えば、「Aテーブル」にある「Bコード」のカウント、と設定するとBコードがあれば、そのカウント結果が返りますが、「Bコード」がない場合、カウントできないので、データシートで見た時に何も表示されません。この場合に、「0(ゼロ)」を表示させたいのですが・・・何かいい方法はありますでしょうか。

補足日時:2001/07/12 13:38
    • good
    • 0

NZで囲ってみては?


NZ(Count(ほげほげ),0)
    • good
    • 2

??????なのですが、


セオリーどおり、COUNT(*)のSQL文を投げれば
きちんと0件という1レコードがもどってきます。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

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

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

QAccessの集計、0件のデータを表示させるには?

Accessで選択クエリの集計を作りたいのですが…。
例えば、誰が何の質問を受けたか、というような、以下のようなテーブルがあるとします。
【A:データテーブル】
Aさん数学
Aさん理科
Bさん社会
Aさん理科
Bさん理科
【B:教科マスター】
1数学
2社会
3理科
AとBはリレーションでむすんで?あります。

で、Aテーブルを元に集計を使って以下のようにしたいのです。
Aさん理科2件
Aさん数学1件
Aさん社会0件

Aさんだけを抽出するのは、「抽出条件」で絞ればいいと思います。
教科のそれぞれの件数を出すには、「集計」で教科ごとにグループ化して教科をカウントすればいいと思うのですが、どうしても0(ゼロ)件のデータが出てきません。(上記の例で言うと、「Aさん社会0件」が出ない)
0を表示させるにはどこに何を書いたらいいのでしょうか?

Aベストアンサー

どーも#4です。
DCount("教科ID","データテーブル","教科ID=" & [教科ID] & " And ID=" & [ID])
の意味はクエリの[式ビルダ]の組み込み関数
DCount (<expr>, <domain>, <criteria>)

<expr>はカウントするフィールド
<domain>はカウントするテーブル
<criteria>はカウントする条件になります。

<criteria>に"教科ID=1 And ID=2"とすると、<domain>で指定したテーブルの「教科IDの値が1」でかつ「IDが2」のデータのカウントを条件に指定していることになります。

"教科ID=" & [教科ID] & " And ID=" & [ID]
と書くと、「教科IDがクエリの[教科ID]の値」かつ、「IDがクエリの[ID]の値」という条件です。

ちなみに教科ID、IDの両方がもし文字列なら、
"教科ID='" & [教科ID] & "' And ID='" & [ID] & "'"
と書きます。

違うことですが、
>グループまたは集合のないHAVING句です」と出ます。

何をされたのかわかりませんが、私が提示したSQLではグループ化など行っていないのでこういうエラーが出るはずがないのですが・・・(私がテストで抽出したときはWHEREでやりましたし、うまくいきましたよ)

どーも#4です。
DCount("教科ID","データテーブル","教科ID=" & [教科ID] & " And ID=" & [ID])
の意味はクエリの[式ビルダ]の組み込み関数
DCount (<expr>, <domain>, <criteria>)

<expr>はカウントするフィールド
<domain>はカウントするテーブル
<criteria>はカウントする条件になります。

<criteria>に"教科ID=1 And ID=2"とすると、<domain>で指定したテーブルの「教科IDの値が1」でかつ「IDが2」のデータのカウントを条件に指定していることになります。

"教科ID=" & [教科ID] & " And ID=...続きを読む

QAccessで“0”ゼロ表示をする

いつも大変お世話になっております。

Accessの数値型フィールドで、該当する数字がない場合、通常はブランク(空白)になっていますが、それをゼロ表示するには、どうしたらいいのでしょうか?
表示形式の中で変更しても、そのようにはなりません。

何がしたいのかというと、クエリで、在庫表を作っているのですが、入庫が100で出庫が50だと在庫数(入庫-出庫)は50と表示されますが、入庫が0で出庫が50の場合、答えは-50なのに、そのように表示されません。入庫の数字がブランクだからいけないのかな??と思い、このような質問をさせていただきました。

どうぞよろしくお願いします。m(_ _)m

Aベストアンサー

>該当する数字がない場合、通常はブランク(空白)になっていますが
あれはブランクではなくNullです
レコードがないという状態を表しています

Nullはデータベースでは非常に重要な概念で
軽々しく0に置き換えない方がいいのですよ

ただしNullが絡む計算の結果はNullとするという決まりがあります
それじゃ困る、Nullを0として計算したいというときにはNz関数を使います

Nz(入庫,0)-Nz(出庫,0)

重要な概念ですからヘルプ等でよく研究してください

>表示形式の中で変更しても、そのようにはなりません。
書式の第4項がNullに対する書式ですから0と表示させることも出来ますが
混乱させるだけの結果になるでしょうね

QACCESS クエリ(カウント0のレコードも表示させたい)

すみません。クエリについて教えて下さい。

<生徒テーブル>
生徒ID・氏名

<出席テーブル>
生徒ID・日付

上記2のテーブルから、クエリで下記の情報を取り出したいのです。

<出席日数>
氏名・出席日数

<出席テーブル>には、1レコードもない生徒がいます。
この生徒は<出席日数>の出席日数を0として表示したいんです。

カウントを使って計算したところ、<出席テーブル>に1レコードもない生徒は表示できません。

説明がわかり難くて申し訳ないです。
どうぞ教えてください。

Aベストアンサー

SELECT
  生徒テーブル.生徒ID,
  生徒テーブル.氏名,
  Count(出席テーブル.生徒ID) AS 出席日数
FROM
    生徒テーブル
  LEFT JOIN
    出席テーブル
  ON
    生徒テーブル.生徒ID = 出席テーブル.生徒ID
GROUP BY
  生徒テーブル.生徒ID,
  生徒テーブル.氏名

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qaccess 存在しない項目を”0件”と表示させるには?

宜しくお願いします。

仕様環境:WinXP access2002

acecssで集計クエリを作り、それが反映されるフォームを作っています。
集計方法は「カウント」です。

テーブルは重要なところだけいいますと、
ステータステーブル・・・IDとステータス(「見積中、返答待ち、確定、作業中、作業完了、入金待ち、終了、NG」)。
案件テーブル・・いろんな項目がありますが、「ステータス」という項目があり、別途のフォームで
そこをコンボボックスにしてステータステーブルの情報を引っ張ってきています。

そこでなのですが、「集計フォーム」の画像を見ての通り、
実際、まだ案件テーブルで選択されていない項目については表示されません。
例えば:確定、作業中、作業完了など。

これを「確定0件、作業中0件、作業完了0件」と出したいのです。
集計クエリには実際まだ存在していないので、表示されないのはわかりまして、
それがフォームにも反映しているのもわかります。

そこでnz関数を使って、例えば
「確定:nz([ステータス],"0")」や「確定:nz[確定],"0"」ではクエリに表示されません、
(いろいろ試したのでエラーが出たときもあります)

よく考えてみると存在していないものは、nz関数ではダメなのかなと思っています。
(nz関数は存在しているnull値を違う値に変えるものと認識しています)

クロス集計クエリも試しましたが、存在していないところは「#name」とエラーになり、
nz関数を同様に使ってみたのですがダメでした。

どうすれば存在していないものに対して”0件”という表示がだせるのでしょうか?
そもそもの構造がおかしいのでしょうか?
クエリは普通の集計クエリでもクロス~でもカウントを使うので”0”が”1つ”として
数えられてしまうと本末転倒です。

なるべく基盤の構造はシンプルに作りたいので集計クエリを望んでいます。

改善点があれば、ご教示お願いします。

余談ですが、こういうaccessの個別レッスンとかやっている教室があったら
教えて頂けば幸いです。(東京・ちなみにアビバは資格向けのようです)

宜しくお願いします。

仕様環境:WinXP access2002

acecssで集計クエリを作り、それが反映されるフォームを作っています。
集計方法は「カウント」です。

テーブルは重要なところだけいいますと、
ステータステーブル・・・IDとステータス(「見積中、返答待ち、確定、作業中、作業完了、入金待ち、終了、NG」)。
案件テーブル・・いろんな項目がありますが、「ステータス」という項目があり、別途のフォームで
そこをコンボボックスにしてステータステーブルの情報を引っ張ってきています。

そ...続きを読む

Aベストアンサー

集計クエリの結果とステータステーブルを外部結合させて、NULLなところをNz()で0と表示させればよいです。

SQLでいうとこんな感じ:
クエリQ1: select State, count( State ) as NumState from TMatter group by State;

クエリQSummary: select TState.State, Nz(Q1.NumState,0) as NumState from TState Left join Q1 on TState.State=Q1.State;

Qアクセスのクエリで空白を0として計算したい

アクセスのクエリで1・2列目に数値データを入れておき、3列目で合計を表示させたいのですが、1・2列目に空白セルがある場合には0(ゼロ)として計算したいのです。(データが空白だと、3列目も空白になってしまいます。)

1列目 2列目 3列目(合計)
 3   2   5
(空白)  2  (空白) ←これを2と表示したい!
(空白) (空白) (空白) ←これを0と表示したい!

わかりにくい文章ですみませんが、教えてください。

Aベストアンサー

Nz([1列目],0) + Nz([2列目],0)
ですね。
Nz関数については、VBAのヘルプで調べてください。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESS DCOUNTの抽出条件について

式1: DCount("コード","テーブル","コード=" & [テーブル]![コード])

結果の2以上のものを抽出したいのですが、どのように記述するのでしょうか?

>1または>=2またはnot 1でもいいですが・・・
記述方法が良く分かりません。

Aベストアンサー

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも上記エラーが出ているようでしたら、
 元となるテーブルとクエリの情報(フィールド名とデータ型)をお知らせ下さい)
※なお、コードは数値型と想定しています。もしも文字列方の場合は、併せて
 式を「"コード='" & [テーブル]![コード] & "'"」と変更する必要があります。

上記のエラーを回避するには、DCountの第1引数を「*」にします。
また、コードがNullのレコードで、クエリの表示結果が「#エラー」となるのを
回避するためには、第3引数にNz関数を使用します。
(コードの最小値は0か1でしょうから、「最小値-1」(=-1か0)にするのがよいかと
 思います)

【Nullは重複数に含めない場合】
DCount("*","テーブル","コード=" & Nz([テーブル]![コード],-1))
※コードがNullの場合は、第3引数の結果がTrueにならない(Null=-1)ので
 0件扱いとなるため、抽出条件の「>1」で弾かれます。
 また、第3引数にNz関数を使用する代わりに、クエリの『コード』の抽出条件に
 「Is Not Null」を指定する(→最初から集計の対象外にする)方法もあります。

【Nullも1つのコードとして重複扱いする場合】
DCount("*","テーブル","Nz(コード,-1)=" & Nz([テーブル]![コード],-1))

No.3です。

> コード=の構文エラー 演算子がありません。
> 不明。
> とエラーメッセージが表示されます。

そのエラーメッセージの内容からすると、『コード』が「Null」(空白)のものがある、
ということだと思います(その事態は想定していませんでした)。
一応、こちらで作成したサンプルにて、DCountを使用した場合に、同様の
メッセージ(計2件)が表示されるのは確認しました。
(補足の文意を「集計クエリで解決はできたが、DCountの方はエラーとなる」
 と取りました。もしも集計クエリの方でも...続きを読む

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報