• ベストアンサー
  • 困ってます

値がNullの場合のクエリーの条件

AとB2つのテーブルを結合させて、BにあるIDをIDごとに集計しようと思っています。もちろん値がないIDは表示されません。そこで値がないIDも表示させたいのですが、どのようにすればいいのでしょうか? SELECT AList.Cid, AList.Cname, Count(BList.Cid) AS [Count] INTO 月別集計 FROM BList RIGHT JOIN AList ON BList.Cid = AList.Cid WHERE (((BList.Date)>=[Forms]![集計]![day1] And BList.Date)<=[Forms]![集計]![day2])) GROUP BY AList.Cid, AList.Cname ※⇒HAVING (((IIf(IsNull(Count([dbo_KAccessList].[Cid])),0))<>False)) ORDER BY AList.Cid; ※のような条件をクエリーにつけてみましたがダメでした。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

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

  • ベストアンサー
  • 回答No.2
  • zzzzzz
  • ベストアンサー率61% (70/113)

すみません。外部結合の順序を読み違えて書いています。#1は無視してください。 HAVING句が使えないことに関しては同様です。 「値がないIDも表示」が「AListに値がないIDも表示」という意味でしたら、外部結合をLEFT JOINにしてください。 この場合はSELECTおよびGROUP BYする列に関して、AList.CidをBList.Cidに変えてください。 この場合にはBList.Cidに現れないIDについては表示されません。 AList.CidかBList.Cidのどちらかに現れるIDについて全て表示、という場合には左右の外部結合で抽出した結果をUNIONで結合してください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございました。 Access、とくにクエリーやVBAはまだまだ初心者でして大変助かりました。 さっそく明日、試したいと思います。

その他の回答 (1)

  • 回答No.1
  • zzzzzz
  • ベストアンサー率61% (70/113)

Access/Jet-SQLと判断して回答します。 HAVING句は集計後の表に関する条件を設定するものなので、この意味では使用できません。 「値がないID」が「BList.CidがNULLのものについてもまとめる」という意味でしたら、 Count(BList.Cid)をCOUNT(*)に変更してください。 (Count(BList.Cid)は、BList.CidがNULLでないものの件数を数える、という意味です) 「値がないID」が「BList表には現れないIDについても結果を表示したい」ということでしたら、 外部結合のやり方から考え直す必要があります。 この場合は、「どのIDを結果に含めたいのか」を書いてください。 なお、BList.Cidの値で、AList.Cidには現れないもののことを考慮するのなら、 SELECTするのはAList.CidよりもBList.Cidとした方が安全です。(結果が見にくくなる可能性を排除できます)

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • ACC クエリ 条件にIIf

    宜しくお願いします。 ACCESSのクエリで、抽出条件に画面からの値を使用したいのですが、 その値がNULL(未入力)時には全件抽出としたいのですが、 うまく行きません。下記の「""」には何をセットすれば よいのでしょうか? IIf (NOT ISNULL( [Forms]![F_伝票照会]![伝票NO]), [Forms]![照会]![伝票NO], "")

  • 検索条件について。

    あるフォームで選択・入力された値から抽出を行うようなクエリを作成しました。 空欄でもきちんと抽出されるようにと、下記のようなものを記入しました。 IIf(IsNull([Forms]![検索結果]![rank]),True,[ランク] Like [Forms]![検索結果]![rank]) ですが、実行を行う(空欄で実行)と、「式が複雑すぎです」とエラーがでてしまいます。 実際の値を入力すると、何も抽出されません。 どこが違うのでしょうか? よろしくお願いします。

  • フォームからクエリの抽出期間を指定するにあたって

    フォームのテキストボックス(開始日付,終了日付)に入力された期間内の レコードをクエリで抽出するために、以下のような抽出条件を設定しています。 Between [Forms]![フォーム1]![from date] And [Forms]![フォーム1]![終了日付] ここまでは問題なく出来ています。 ですが、例えばテキストボックスに何も入力していないときに、 全ての期間から全件表示させるような方法はありませんでしょうか? IIf(IsNull([Forms]![フォーム1]![開始日付]),True,~ というような形で、IIfとIsNullの組み合わせも考えたのですが、 日付は直接フィールドでは無く抽出条件のため、 Trueより後が設定できずに悩んでおります。 出来ればVBAは使いたくないのですが、 何か良い方法はありませんでしょうか?

  • MySQLにてCOUNTした値を更にCOUNT

    MySQLにてCOUNTした値を、更にCOUNTする事を1回のSQLにて実行する事は可能でしょうか? ※2回のSQL、プログラミングを介する、EXCELで再集計する等でならCOUNTのCOUNTは求められるのですが…1回のSQLでの回答お願いします。 ユーザーIDと課金額のカラムからなる、以下のようなテーブルがあるとします。 buyテーブル user_id,coin 1,100 5,100 10,200 5,200 5,200 17,100 1,100 2,200 23,500 ユーザー毎の課金回数は下記にて求められますが、 SELECT user_id,COUNT(coin) FROM buy GROUP BY id user_id,count(coin) 1,2 2,1 5,3 10,1 17,1 23,1 count(coin)毎の人数というのはどのように求めればいいでしょうか? いわば下記のような集計結果が理想です。 ※このような結果を1回のSQLにて出力するSQLをズバリ今回の例に沿って知りたいです。 count(coin),count(count(coin)) 1,4 2,1 3,1 ■環境 Apache2 MySQL5 PHP5 ご教授よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Access クエリ IN演算子について

    初めて質問します、よろしくお願いします。Access2007にて開発をしています。 リストボックスにて商品を選んだ際に隠しテキストボックスに´商品名1´,´商品名2´と入力し、クエリのwhere句に IIf(IsNull([Forms]![フォーム1]![抽出商品名]),True, [商品名] IN( [Forms]![フォーム1]![抽出商品名])) と記載してデータ抽出を試みているのですが、常に値が0件で返ってきません。 このやり方ではIN演算子は使えないのでしょうか? ご教唆のほど、よろしくお願いします。

  • Access2010 SQL内でのNULL判断

    業務でAccess2010を使用しています。 Accessのコードビルダーで書くINSERT文の中で、ある項目がNULLだったら、1を入れて、 NULLじゃなかったら、その項目の一番大きい値に+1して入れたいのですが、なかなかうまくいきません。 今はこんな感じのinsert文です。 INSERT INTO 職歴詳細 ( 社員番号, 業務番号, 詳細番号, スキル区分, スキルコード ) SELECT '11111', 9,IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1), 1, '01' FROM 職歴詳細 WHERE 社員番号='11111' AND 業務番号=9; しかしこれでは、集計関数の一部として指定された式’IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1)’を 含んでいないクエリを実行しようとしました。というエラーがでます。; 調べても調べてもうまくできません。ご教授お願いいたします。

  • accessでDISTINCT 句と矛盾

    IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

  • クエリが・・・動きません

    クエリが・・・動きません 超初心者で 困っております よろしくお願いします。 現在 Access 2000の時代に作成した ADPでSQLにアクセスしております その中のクエリがAccess2007ではエラーとなり困っております。 内容は下記のとおりで 入力した日付でテーブルを更新する処理です エラーは「 PROCEDURE 」付近での構文エラーとのことです ナニブン素人なもので よろしくお願いします。 ALTER PROCEDURE 更新処理 (@syoribi datetime) AS update dbo.koushin set dbo.koushin.R_mo_Deposit = a.Deposit, dbo.koushin.R_mo_Withdraw = a.Withdraw from ( SELECT SUM(T_mo_Deposit) AS Deposit, SUM(T_mo_Withdraw) AS Withdraw FROM dbo.tb_Transact GROUP BY T_dt_Date, T_ch_Num_A, T_in_Num_B HAVING (T_dt_Date = @処理日付を入力してください) ) a where dbo.tb_koushin.R_Num_A = a.T_Num_A and dbo.tb_koushin.R_Num_B = a.T_Num_B 不足な部分などがありましたら 追記しますのでよろしくお願いします。

  • 【Access】条件未入力時、全件ヒットするクエリについて

    下記のテーブルがある場合、下記のクエリを実行すると、下記のような結果になります。 条件1. [Forms]![F_Form]![name]に「ル」と入力 →「ベルト」のレコードを抽出 条件2. [Forms]![F_Form]![name]に何も入力しない。 →「ベルト」「ニット」「ズボン」のレコードを抽出 【クエリ】 SELECT * FROM TBL WHERE (((TBL.NAME) Like IIf(Nz([Forms]![F_Form]![name])='','*','*'+Nz([Forms]![F_Form]![name])+'*'))); 【テーブル(TBL)の中身】 ID NAME 1 ベルト 2 ニット 3  4 ズボン 条件1は意図した動作となっていますが、 条件2は意図した動作をしませんでした。 条件2の場合、全件ヒットしたいと思います。 ただ、上記のクエリではNAME列に値が入っていないID=3の値が抽出できませんでした。 その為、条件2の場合、全件ヒットするクエリの書き方をご存知の方がいらっしゃいましたら、 ご教示いただければと思います。 よろしくお願いします。

  • NULL 値が許可されていません

    SQLServer2008かじり始めの素人です。ご教授願います。 MicrosoftSQLManagementStudioにて、「新しいクエリ」で以下のクエリ実行で 以下のエラーが出ます。対応ご存知な方がいらっしゃいましたら 教えてください。 【環境】Windows2003Server     SQLSERVER 2008 【テーブル構成】  データベース:BUHIN_SEA                  列 親: 部品テーブル(ID,工号,納入先,形式)            ↓      列 子: 納入先テーブル(NOUNYU_ID,納入先)   子: 形式テーブル(KEISIKI_ID形式) * NOUNYU_ID,KEISIKI_ID は主キー 設定 【クエリ】   INSERT INTO 納入先 ( 納入先) SELECT DISTINCT LTrim(部品テーブル.納入先) FROM 部品テーブル LEFT JOIN 納入先 ON 部品テーブル.納入先 = 納入先.納入先 WHERE (((LTrim(部品テーブル.納入先)) Is Not Null) AND ((納入先.納入先) Is Null)) ORDER BY LTrim(部品テーブル.納入先); 【実行結果】 メッセージ 515、レベル 16、状態 2、行 1 テーブル 'BUHIN_SEA.dbo.納入先' の列 'NONYU_ID' に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。 ステートメントは終了されました。 * 'NONYU_ID' は、主キーのため、NULLを許容できません。