• ベストアンサー

SQLのカウントについて

質問です。 テーブルAとBに下記データが存在した場合、AにいてBにいなかったデータは「0」AにいてBにもいた場合のデータはその件数を抽出するSELECT文を教えて下さい。 テーブルA   テーブルB A1       A1 A2       A1 A3       A1 A4       A3 A5       A4 ---------- 結果 ---------- A1 3 A2 0 A3 1 A4 1 A5 0

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

  • ベストアンサー
回答No.2

すみません。訂正です。 フィールドAのデータとテーブルBのデータのカウント結果を抽出することで 必要な結果を取り出すことができます。  ↓ テーブルAのフィールドデータと、テーブルBのフィールドデータのカウント結果を抽出することで 必要な結果を取り出すことができます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

こんばんは。 「自信なし」ですが、回答させていただきます。 (いつもはOracleを使ってますので…。理屈はSQLServerといえ同じだと思います。 自信がなかったので、AccessのSQLクエリで検証してみました(^^;) テーブルAのレコードデータが主体、という前提でよろしいでしょうか? ならば、抽出対象とするフィールドを使って、テーブルAとテーブルBとを 左辺外部結合(LEFT JOIN)します。 この時点で、  テーブルAの全レコード+テーブルBの一部(テーブルAに存在するデータを持つもの) が抽出できるようになります。 それから、テーブルAのフィールドデータでグループ化をかけ、 フィールドAのデータとテーブルBのデータのカウント結果を抽出することで 必要な結果を取り出すことができます。 SQL文は、以下の通りになります。 SELECT テーブルA.フィールド, Count(テーブルB.フィールド) FROM テーブルA LEFT JOIN テーブルB ON テーブルA.フィールド = テーブルB.フィールド GROUP BY テーブルA.フィールド ORDER BY テーブルA.フィールド;

0000hiro
質問者

お礼

親切な回答ありがとうございます。 理屈がわかりましたので早速試したいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SQLの書き方(チェックボックス)

    このスレでいいのかちょとわからなかったのですが、 SQLの書き方のなのでこちらで質問をさせて頂きます。 (VB.NET) □ A □ B □ C チェックボックス(A,B,C)があります。 例えば(A、B,C)どれか一つ選択された場合 SELECT文でテーブルA、B、Cからデータを抽出するイメージは わくのですが、チェックボックスで(A、C)など複数 選択された場合には、SELECT文でテーブルAを抽出し 終わった後、SELECT文でテーブルCを抽出するのは 問題があるのではないかと思います。 ただイメージがわきません…。ヒントでもいいので もしよろしければアドバイスよろしくお願い致します。

  • データがあれば○○なければのSQL

    基本的なことなのかもしれませんが・・・ AとBというテーブルがあり、あるタイミングでAを元にBを作成します。つまりBはデータがある場合とない場合があります。また、2つは関連番号で紐づいています。 Aテーブルを抽出したい時に、抽出条件は以下です。 ・Bテーブルのステータスが1であれば抽出 ・Bテーブルのステータスが0であれば非抽出 ・Bテーブルにデータがなければ抽出 INNER JOINだとデータがない時に抽出できないし、 WHERE句にCASE句を入れればいいのかなと思いましたが、テーブルにデータがあればなんて条件書けないしで詰まりました。 SELECTした結果に対して条件つけて抽出する手も思いつきましたが もっと美しいSQLがあれば教えてもらえないでしょうか。 環境はSQLServerです。よろしくお願いします。

  • mysqlのsql文について教えて下さい

    mysqlのsql文について教えて下さい 下記のようなテーブルとデータがあった場合に どうやれば 2,次郎だけを抽出できますか? 本日日付(2010-08-06)が 既にテーブルBにdateが存在する場合は 3,1,2010-08-04 3,1,2010-08-06を 対象外にしたいです。 Aテーブル id,user 1,太郎 2,次郎 3,3郎 Bテーブル targetid,homonid,date(datetime型) 3,1,2010-08-04 3,1,2010-08-06 3,2,2010-08-05 下記だと2010-08-04にヒットしてしまい(当たり前?)動作しません。 select distinct a.* from tblA a, tblB b where date_format(b.date, "%Y-%m-%d") <> "2010-08-06" ;

  • SQL・・・分かりません。

    SQLの勉強をしています。 仕事の研修で習っているのですが、基礎的なものを学習しましたが 応用したパターンが全く理解ができません。 例としまして ・AテーブルとBテーブルを結合して、データを抽出する ・Aテーブルに存在しているのに、Bテーブルに存在していないデータも抽出する ・しかし、Aテーブルに存在していないのに、Bテーブルに存在しているはデータは抽出しない ☆抽出方法に二パターン存在する 1つ目も全く見当つかずです。ヒントでよいので教えていただけたらと思います。 意味が分からなかったらすみません。何を描き足したらよいか教えて下さい。 宜しくお願いしたします。

  • ACCESS2000のSQLについて

    ACCESS2000のSQL文について質問です。 K情報テーブル:(支店(テキスト型),所属(テキスト),氏名(テキスト),ログ(テキスト),抽出件数(数値),処理日(日付型)) 支店 所属 氏名 ログ 抽出件数 処理日 ----------------------------------------- 関東 埼玉 太郎 A   50    2009/02/25 関西 大阪 次郎 B   15    2009/04/01 関東 埼玉 太郎 A   10    2009/03/05 関西 大阪 次郎 B   5    2009/04/06 東北 青森 三郎 C   2    2000/01/02 東北 青森 三郎 A   2    2000/01/02 ・ ・ ・ ----------------------------------------- 以上のテーブル情報を、SQL文にて抽出したいのですが、抽出条件が私には難解で解決の見通しが立ちません。ご教授をお願いします。 ***条件*** [ログ] = "A" のみ抽出。 現在日から過去3ヶ月前までのデータのみ抽出。 [氏名]ごと[ログ]の総合計。 [氏名]ごとの[抽出件数]の総合計。 [ログ]の総合計の上位30件を降順で。 順位にNo.をふる。 上記の条件で抽出したデータをを下記の作業テーブルに出力したと思っております。 作業テーブル:順位,所属,氏名,ログ件数,抽出件数 宜しくお願いします。

  • SQL文について

    Select文についての質問です。 テーブルA,B, Cがります。  Aテーブルのカラム A1,A2, A3  Bテーブルのカラム B1, B2, B3  Cテーブルのカラム C1,C2, C3 A1=B1,A2=B2の  A3,B3 と、 A1=C1でC3がNULLでないCテーブルの件数 を一度に取得したい場合、どのようなSQL文になるでしょうか。 よろしくお願いします。

  • AccessのSQLで合計数をそれぞれカウントした

    お世話になります。 Access2000で作成しております。 下記のテーブルでAccess2000のSQLを駆使して、 下記の結果を抽出したいと思っております。 やまだの成績=80の件数のみを抽出することはできたのですが、 80と60を同時に抽出する方法がわかりません。 お手数ですが教えていただければと思います。 --テーブル--- 名前   成績 やまだ  80 やまだ  80 たなか  80 やまだ  60 やまだ  80 ---結果※やまだのみ、各点数の件数----- 名前   80の件数 60の件数 やまだ 3  1

  • SQLを教えてください!!

    テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、 どういうSQlを書いたらいいのか教えてください。 下記例としてテーブルにデータがあったとしたら、結果として 004 商品D 005 商品E 006 商品G というデータを抽出したいのですが・・ テーブルA             テーブルB -------------        ----------------------- コード  商品名 NO コード   商品名 001 商品A        1 001 商品A 002 商品B        2 001  商品A 003 商品C        3 002   商品B 004 商品D        4 003 商品C 006 商品G        5 003 商品C                 6 005 商品E

  • SQL の抽出方法

    あるテーブルABC に項目aとbとc があるとします。 今、抽出の条件が 仮にa=1,b=2 として、 この条件で複数件のデータが抽出され その中からcが最大のデータ1件のみを抽出するとします。 このSQLを作成する場合、 どのような方法がありますでしょうか? select文で、1度cのmax値を求めないといけないでしょうか?

  • SQLの記述について

    SQLの記述で Aトランザクションテーブル(以後Aテーブル)とBマスタテーブル(以後Bマスタ)が有り, AテーブルにBマスタの内容を反映させ或る条件のデータだけ抽出は可能でしょうか? 例 Aテーブルの内容をBマスタを検索しデータがAの場合のみ抽出 Aテーブル        Bマスタ キー  データ     キー  データ      001 0001    001 A 001 0002    002 B 002 0003    003 A 001 0004    004 C 002 0021 003 0005 004 0001 実行結果 キー  データ 001 0001 001 0002 001 0004 003 0005 上記の結果のように,Aテーブルの内容からBテーブルを見て条件を判断しての抽出は可能でしょうか?