• ベストアンサー

SQL文の記述について

以下の項目を抽出するSQL文を色々考えているの ですが、どうしても思い浮かびません。ぜひとも ご教示いただきたく存じます。使用データベースは PostgreSQL7.2です。 テーブル構成は以下のとおりです。 事業コード 部署コード 情報コード 01     02     01 01     02     02 01     02     03 02     05     01 02     05     02 02     05     05 02     07     02 02     07     03 02     07     06 以上のようなテーブルから、「情報コード02と03の 両方をもつ事業コードと部署コードの組み合わせ」を 求めるSQLを記述したいのです。この結果は 事業コード 部署コード 01     02 02     07 となります。 以上のような説明でご理解いただけますでしょうか。 足りない情報などがありましたらご指摘ください ませ。 宜しくお願いいたします。

noname#61135
noname#61135

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

  • ベストアンサー
  • sawagani
  • ベストアンサー率73% (19/26)
回答No.2

事業コード, 部署コード, 情報コードでユニークとなるのであれば、 select 事業コード, 部署コード from TBL1 where 情報コード in ('02', '03') group by 事業コード, 部署コード having count(*) = 2 ユニークにならないのであれば、 select 事業コード, 部署コード from ( select distinct 事業コード, 部署コード, 情報コード from TBL1 ) as WK where 情報コード in ('02', '03') group by 事業コード, 部署コード having count(*) = 2 こんな感じかなぁ。 ちなみにPostgreSQLを動かす環境がないので、動作するかは不明です(^^;

noname#61135
質問者

お礼

ご回答ありがとうございます。事業コード, 部署コード, 情報コードでユニークですので最初にご提示いただいたSQLを試したらうまくいきました。ありがとうございました。havingを使うのですね。参考になりました。

その他の回答 (1)

回答No.1

こんなのはどうでしょうか。 select tmp1.a tmp1.b from (select 事業コード as a, 部署コード as b from xxxtable where 情報コード='02') as tmp1, (select 事業コード as a, 部署コード as b from xxxtable where 情報コード='03') as tmp2 where tmp1.a=tmp2.a and tmp1.b=tmp2.b; パフォーマンスは無視してます。

noname#61135
質問者

お礼

ご回答ありがとうございます。もっと複雑なクエリーになると思いましたが、意外に簡単なものですね。パフォーマンスの問題はハードウェアでカバーできると思うので、なによりもわかりやすさ重視です。その点でとても参考になりました。ありがとうございました。

関連するQ&A

  • SQL文をどう記述すれば良いか教えて下さい。

    テーブルAが以下の様に在るとします。 連番(ユニークキー)/日付/社員コード/所属コード そして、社員コード、所属コードの名称が、テーブルBに登録されています。 区分/コード/名称 ここで、区分+コードでユニークキーとなっていて、区分=1は社員コード、区分=2は所属コードとなっています。 単純に、テーブルAから、ある日付を指定して、連番・社員コード・所属コードを取得する場合、SQL文は以下の様になると思います。 SELECT 連番,社員コード,所属コード FROM テーブルA WHERE 日付='20030401' この時、同時に、テーブルBから社員コードに対応する名称、及び所属コードに対応する名称を取得したい場合は、どの様に記述すれば良いのでしょうか?

  • SQLのSELECT文教えてください。

    VB5.0で、DBはSqlServer2000です。 SQL文のSELECT文で質問です。 ○A_TABLEの構成(概略) ・・・担当コード1・・・担当コード2 ○TANTO_TABLE 担当コード/担当名 (質問)TANTO_TABLEからA_TABLEの担当コード1と担当コード2の担当名を抽出したいのです。 次のSQLだと担当コード1のみしか抽出できません。 効率よく担当コード1と2の担当名を抽出するSQLを教えてください。お願いします。 SELECT 担当名 FROM A_TABLE,TANTO_TABLE WHERE A_TABLE.担当コード1 = TANTO_TABLE.担当コード

  • SQL文を教えてください

    SQL文を教えてください。 以下のテーブルがあります。 T入金 [ID] [名前] [金額] [入金日] 1, 山田, 25000, 2009/01/01 2, 佐藤, 5000, 2009/02/01 3, 山田, 30000, 2009/01/02 4, 佐藤, 45000, 2009/02/02 5, 佐藤, 10000, 2009/02/03 同じ人物で、入金額50000円に至ったときの入金日を 抽出したいと思っています。 上記データだと、 山田さんは入金日2009/01/02、 佐藤さんは入金日2009/02/02、 ということになります。 これを一つのSQL文で抽出できますでしょうか。 ご教授宜しくお願いいたします。 (Access2000のクエリで抽出しようとしていますが、Accessで無理ならSQL Server、MySQL、PostgreSQLでも可です)

  • SQL文が上手く記述できません・・。

    <<テーブル名:master>> SHOUHIN NO  KOSU ------- --- --------------- A       1   500 A       2   100 A       2   300 A       2   200 A       3   220 A       3   150 A       4   200 A       4   300 A       4   100 <<抽出結果>> SHOUHIN    NO1    NO2    NO3    NO4    GOUKEI -------    ---    ---    ---    ---    ------ A        500    600    370    600    2070 上記のmasterテーブルから、NO毎にKOSUの値を集計して 1レコードにまとめて下記の抽出結果のようにデータを抽出したいと 考えているのですが、なかなか上手くSQLを記述する事が出来ません・・・。 下記のような結果を抽出することは可能でしょうか? ご存知の方がいらっしゃれば、ご教授頂ければ幸いです。 宜しくお願い致します。

  • 【初歩的な質問ですが・・・】 SQL文書き方がわかりません

    SQLの知識に乏しい者です。 よろしくお願い致します。 ●テーブルA ・会計コード ・年度 ・部署番号 ・社員番号 ・その他幾つかのデータ ※Where句で「年度>2002年」以降を抽出 のテーブルがあります。 この時、Bテーブルで ●テーブルB ・会計コード(主キー) ・年度 ・部署番号(主キー) ・社員番号(主キー) ・その他幾つかのデータ ※Aテーブルで抽出されたデータの中から絞り込む というテーブルを抽出するSQL文を組みたいのですが、効率の良いやり方がわかりません。 副問合せで  Select [B表で抽出した列名…]  From B表  Where 会計コード = (Select 会計コード               From A表               Where 年度 > '2002')  AND 部署番号 = (Select 部署番号             From A表               Where 年度 > '2002') ・・・・以下省略 の様に書くと効率が悪い気がしました。 (実際には、副問合せが6個書くことになるため) 良い書き方を知っている方がいらっしゃいましたら、よろしくお願い致します。

  • SQL文について(片方のテーブルに存在しないレコード抽出)

    以下のような2つのテーブルがあったとして、 2つともに存在する「店コード」を抽出するのはSQLは分かるのですが、 片方に存在しない「店コード」(以下の例の場合、「2」)を抽出するSQLを 一文で書くにはどうすればいいのでしょうか? <店テーブル> 店コード 住所・・・(その他、基本情報) 1 aaa 2 bbb 3 ccc <販売テーブル> 店コード 販売品目・・・(その他、販売数など) 1 xxx 3 zzz

  • VBAでSQL文の実行の記述について

    こんにちは。アクセスVBA初心者です。 どなたか教えてください! キーが二つあるテーブルに対して、 クエリやマクロを使わずにSQL文を使って存在チェック処理を行って、 ・0件ならば、画面入力値で登録処理、 ・0件でないならば、画面入力値で担当者名を更新処理 という処理を行いたいのですが、 どのようにVBA上でSQL文を記述し、 上記の条件を記述すればいいのかわかりません。 ちなみにテーブル名は「担当者マスタ」で フィールドは ・「支店コード」→第一キー ・「担当者コード」→第二キー ・「担当者名」 です。支店と担当者の組み合わせはユニークです。 画面フォーム名は「担当者マスタメンテ」で 画面フィールドは ・「支店コード」コンボボックス ・「担当者コード」コンボボックス ・「担当者名」テキストフィールド です。 どうか教えてください!お願いいたします!

  • SQL文で

    SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB       2 い 3 CC 3 う 4 DD 4 え

  • SQLの集計について教えてください。

    環境はoracle9iです。 ■テーブルの構成 |年度|月|部署コード|商品コード|金額| ■テーブルの内容 |2010|01|AAA|001|1000| |2010|02|AAA|001|2000| |2010|01|AAA|001|3000| |2010|01|AAA|002|3000| |2010|02|BBB|003|4000| |2010|01|CCC|001|5000| |2010|03|CCC|001|6000| 上記のようなテーブルがあり、 これを年度,月,部署コード,商品コードでサマリした値を表示したいです。 と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 そこに年度,部署コード,商品コードでサマリした 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) ■抽出結果の構成 |年度|月|部署コード|商品コード|金額|累計金額| ■抽出結果の内容 |2010|01|AAA|001|4000|6000| |2010|02|AAA|001|2000|6000| |2010|02|BBB|003|4000|4000| |2010|01|CCC|001|5000|11000| |2010|03|CCC|001|6000|11000| GROUP BYと別の集計単位で列を作ることが可能か、 可能であればどのようなSQLを書くべきか、 というところを教えてください。

  • SQL文にて・・・

    質問があります。PostgreSQLです。 テーブル(test_tbl)があるとします。 テーブル構成は --------------------------- id ===== char(16) [英数文字格納] point ==== int2 add_date ==== timestamp --------------------------- このテーブルから idが2文字目から'di6ek68dh5ls7g'のレコードを取得したいと考えています。 レコード数がかなりおおいので パフォーマンスを重視したいのですが、 検索SQLがわかりません。 select * from test_tbl where id like '%di6ek68dh5ls7g'だとでると おもうのですが、 これ以上にパフォーマンスがあがる SQLがわかる方お願いいたします。