• ベストアンサー

SQLで「結果同士」の比較をするには?

SQLで「結果同士」の比較をするにはどのように記述したらいいのでしょうか? Ora10gです。 例えば、構成としてAテーブルは KY項目1_____KY項目2_____Int型データ とします Bテーブルも KY項目1_____KY項目2・・・ といったデータ構成だとします。 Bテーブルのデータを group by KY項目1, KY項目2でカウントした時の件数とAテーブルのInt型データの数が一致しているか比較したいのですが、どのようなSQLでできますでしょうか?

  • mr-r00
  • お礼率93% (480/516)
  • Oracle
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

SELECT Aテーブル.*,T.CNT FROM Aテーブル LEFT JOIN ( SELECT Bテーブル.KEY1,Bテーブル.KEY2,COUNT(*) CNT FROM Bテーブル GROUP BY Bテーブル.KEY1,Bテーブル.KEY2 ) T ON Aテーブル.KEY1=T.KEY1 AND Aテーブル.KEY2=T.KEY2 とりあえず、Aテーブル全部のレコードを出力するようにしました。 件数が一致するものは出力しないなら WHERE Aテーブル.Int型データ2 <> T.CNT OR T.KEY1 IS NULL を追加してください。

mr-r00
質問者

お礼

いつもいつもありがとうございます。 お陰様で参考になり実現できました。 感謝しております。 実現できたことでSQLの要件に不備があったことがわかりました・・・ 大変申し訳ありませんが、ヒントなどいただけると幸いです。

関連するQ&A

  • SQLで「結果同士」の比較をするには? part2

    http://okwave.jp/qa/q7096734.html こちらでお世話になり希望していた要件が実現できました。 本当に助かりました。ありがとうございます。 そこでなのですが、この条件で抽出すると私の認識不足で完全なデータが得られない場合が、あることがわかりました。 Aテーブル構成 KY項目1_____KY項目2_____Int型データ・・・ Bテーブル構成 KY項目1_____KY項目2・・・ KY項目2についてですが、A、Bそれぞれのテーブルで同一データが入っていると限らないことがわかりました。(同一データしか無いと思っていました・・・) なので例えばAテーブルに入っているKY項目2がBテーブルKY項目2と同一の場合は教えていただいたように Aテーブル.KEY2=T.KEY2と結べば問題ないのですが、 AテーブルのKY項目2と同一データがBテーブルのKY項目2に存在しない場合、無条件でデータ「XXXXX」と比較するというようにしたいのですが・・・ 条件分岐で調べたところCASE式でも使えばいいかと思ったのですが・・・こういった場合どう記述したらいいのでしょうか?

  • SQLで違うテーブルの集計結果を比較することは可能でしょうか?

    SQLで違うテーブルの集計結果を比較することは可能でしょうか? 例えばAテーブルがこんな感じです A1_ A2_ A3___ A4 ____A5 XX_ YY _5 __2010/8/13 _10:00:59 Bテーブルはこんな感じです。 B1_ B2_ B3___ B4 ____B5 XX_ YY_ 米 __2008/5/20_ 00:00:00 XX_ YY_ 味噌 _2009/8/22_ 01:02:33 XX_ YY_ 卵__ 2007/8/21_ 23:35:55 XX_ YY_ 醤油 _2010/7/16_ 15:30:35 XX_ YY_ 胡麻_ 2010/8/13_ 02:02:02 です。 見つけたい条件はBテーブルに指定した日付が含まれてる(例えば今日8/13だとか)レコードがあればそのXXとYYが何件あるかカウントをしてその値がAテーブルのA3の値と同一か調べたいのですがこういうことは出来ますでしょうか? SQL Server2005です

  • SQLのクエリーで・・・

    SQL2000を使用しています。(Transact-SQL?) 項目1・項目2・項目3には、それぞれ6桁固定の数字が入っているとします。 この3項目から重複無しの件数をカウントしたいのですが (Group byをして更に全体の件数を取得したい) select count(distinct 項目1+項目2+項目3) from テーブル名 という書き方でも問題ないでしょうか? 他にもっとスマートな方法があれば教えて頂けませんか?

  • NULLを認識させる方法

    Access2000を使用しています。 SQL文について質問です。 AとBの、内容が似たテーブル (フィールド項目は全く同じで入力内容が若干違います) それぞれの'数量'というフィールドを比べ、 内容が一致する件数を出力したいというのが目的です。 方法としてはCOUNTを使用し、 (A.数量)(B.数量)を結合&比較して一致しないレコードが NULL意外のものを件数に数えるようにしたいのです。 しかしIS NULLやIS NOT NULLを使うとTRUEかFALSEが 渡ってしまいます。 そこで質問なのですが、 COUNTを使って、 データが一致しないところがNULLであることを認識させ、 カウントからはずすには、どのようにSQLを作成したら よいでしょうか?

  • SQL初心者です。ご教授願います。

    SQL初心者です。ご教授願います。 テーブルAとテーブルBの比較をしたいと思っています。 比較するのは、全項目(もしくは、特定の項目でもかまいません)です。 どなたか、SQLのアドバイスをお願いします。  条件   ・DB: Microsoft SQLserver2000   ・テーブルAとテーブルBの項目は同じ(コピーして作られたもの)です。   ・比較は全項目です(キー項目の有無も含まれます)。   

  • SQL文

    SQLの初心者です。 Aテーブル(a項目,b項目,c項目)とBテーブル(a項目,d項目,e項目)のテーブルがあります。 d項目順でAテーブルの項目のみ出力するにはどうしたらいいのでしょうか。 例えば次のSQL文ではd項目順で出力されますが結合の為、AテーブルとBテーブルの全項目が出力されます。 SELECT * FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 次のSQL文のようにAテーブルの項目を選択したらAテーブルの項目のみ出力する事はわかります。 SELECT a項目,b項目,c項目 FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 今回はAテーブルの項目数が少ないのでこれでもいいのですが、項目数が多くなると大変です。 上の様に項目を選択しないでAテーブルの項目を全て出力する事は可能なのでしょうか。 宜しくお願い致します。

  • 二つの表の項目を比較して値を取得するSQL

    お世話になります、 二つの表の項目を比較して値を取得するSQLを作成しているのですが、うまくいきません。 具体的には Aテーブル NAME | PRICE ------|------ リンゴ | 100 ------|------ オレンジ | 200 ------|------ ブドウ | 300 ------|------ Bテーブル NAME | PRICE ------|------ リンゴ | 1000 ------|------ オレンジ | 200 ------|------ ブドウ | 1300 ------|------ という二つのテーブルA、Bがあったとします。 このA,Bの二つのテーブルのそれぞれの果物のPRAICEを比較してBのPRICEがアップしている果物を出力するという SQLを教えてください。 <ほしい結果> NAME | PRICE ------|------ リンゴ | 1000 ------|------ ブドウ | 1300 よろしくお願いします。

  • SQL文 特定のレコードを抽出したい

    以下のようなテーブルAがあったとします。 年月日,項目B ---------------------- 20080101 100 20080102 100 20080103 200 20080104 400 20080105 400 20080106 200 SQL文にて、データの抽出を行いたいのですが、 抽出したいのは、データに変更があった年月日と項目Bの値です。 年月日,項目B ---------------------- 20080101 100 20080103 200 20080104 400 20080106 200 前の年月日と比較し、項目Bに違いがあった場合のデータだけ抽出したいのですが、SQL文で行うことは可能でしょうか?? 環境は、SQL Server 2005 です。

  • SQL文にて

    調べたり聞いたりしたのですが なかなか解らなかったので、質問させてください。 AテーブルとBテーブルとがあり、Aテーブルのみにしか 存在しないデータを一発で取得することはできるのでしょうか? Aテーブルのデータ数(100件) Bテーブルのデータ数(80件) Aのキー項目とBのキー項目とは同一です。 処理をしたい事はAとBとでAにしか存在しないデータを ループせずに一回のSQLで行えたらと思っています。

  • ACCESSのクエリで同じSQL文だが結果が異なる

    ACCESS2003にて 選択クエリAをSQLビューで開きSQL文をコピー、 新規作成したクエリBのSQLビューに貼り付けて実行したところ、 AとBで結果の件数が異なりました。 そのままBを保存して終了。 BをSQLビューで開き、 SQL文の末尾の;を削除して実行すると、 Aと同じ件数の結果になりました。 再度Bを保存して終了し、 BをSQLビューで開き、 SQL文の末尾の;を削除して実行すると、 Aと異なる件数(元の結果)になりました。 何が原因なのでしょうか。 SQL文の内容は、サブクエリを含んでいて、サブクエリのFROMは SQLSERVERのリンクテーブルです。 よろしくお願いします。