OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

SQL文おしえてください

  • すぐに回答を!
  • 質問No.142115
  • 閲覧数38
  • ありがとう数1
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 20% (1/5)

例えば、以下のような 2 つのテーブルがあるとします。

営業所テーブル (会社名) (担当者名) 
         会社A 担当者A
         会社A 担当者B
         会社B 担当者C
         会社C 担当者D

商品売上テーブル (担当者) (売上)
          担当者A  10万
          担当者C   5万
          担当者D  10万

これを以下のように会社名Aの会社だけを条件に「担当者B」の売上レコードがない場合でも、ゼロ件としてレコードを取得したいんですがどのようにすればよいのでしょうか。
  (会社名)(担当者) (売上)
   会社A  担当者A  10万
   会社A  担当者B   0万

よろしくお願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル14

ベストアンサー率 33% (1403/4213)

storkさんからACCESSの回答が出ていますのでOracleなどの場合を。

select 営業所テーブル.会社名,
営業所テーブル.担当者名,
商品売上テーブル.売上
from 営業所テーブル,商品売上テーブル
where 営業所テーブル.担当者=商品売上テーブル.担当者(+)
and 営業所テーブル.会社名='会社A'
;

です。

(+)を付けないと担当者Bは検索されません。
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1

結果の部分、   (担当者) (売上)   担当者A  10万   担当者A   0万 は、   (担当者) (売上)   担当者A  10万   担当者B   0万 の間違いですよね?(^^;; いろんな方法があると思うのですが、DBの種類によって異なります。 種類を教えていただけないでしょうか? OracleとかSQLサーバーとか、Accessとか・・・。 ...続きを読む
結果の部分、
  (担当者) (売上)
  担当者A  10万
  担当者A   0万

は、
  (担当者) (売上)
  担当者A  10万
  担当者B   0万
の間違いですよね?(^^;;

いろんな方法があると思うのですが、DBの種類によって異なります。
種類を教えていただけないでしょうか?
OracleとかSQLサーバーとか、Accessとか・・・。

基本的に外部結合にして、「nullだったら0」という形でコンバートするか、sum関数をかませばいけるような気がします。
補足コメント
katu777

お礼率 20% (1/5)

担当者Bは0万の間違いです。すいません。
DBの種類はOracleです。
投稿日時 - 2001-09-27 12:05:20


  • 回答No.2
レベル13

ベストアンサー率 40% (404/988)

katu777さん、こんにちは。 悪戦苦闘しているようですね。 select 商品売上.担当者     sum(商品売上.売上) from 商品売上    営業所 where 営業所.会社名=”会社A”    営業所.担当者=商品売上.担当者(+) group by 商品売上.担当者 で、出来ませんか? 解説) グルーピングと、集計関数・外部結合を使用します。 ★外部結 ...続きを読む
katu777さん、こんにちは。
悪戦苦闘しているようですね。

select 商品売上.担当者
    sum(商品売上.売上)
from 商品売上
   営業所
where 営業所.会社名=”会社A”
   営業所.担当者=商品売上.担当者(+)
group by 商品売上.担当者

で、出来ませんか?

解説)
グルーピングと、集計関数・外部結合を使用します。
★外部結合
※ゼロの場合でも、NULLで、返します
(+)は、ORACLEの記述です。
SQLServerでは、左辺後(=の前)に *を入れます。
ゼロでなくNULLが着あえって来るので、NVL(Not Value-ORACLE)などを使用して、工夫してください。

参考になれば。
でわ
  • 回答No.3
レベル11

ベストアンサー率 34% (97/285)

関連付けしたテーブルに行が存在しないときも表示したい場合は「left(right) outer join」を使用します。 ご質問のケースでいくと select 営業所テーブル.会社名,     営業所テーブル.担当者名,     商品売上テーブル.売上 from 営業所テーブル left outer join 商品売上テーブル    on 営業所テーブル.担当者=商品売上テーブル.担当 ...続きを読む
関連付けしたテーブルに行が存在しないときも表示したい場合は「left(right) outer join」を使用します。

ご質問のケースでいくと

select 営業所テーブル.会社名,
    営業所テーブル.担当者名,
    商品売上テーブル.売上
from 営業所テーブル left outer join 商品売上テーブル
   on 営業所テーブル.担当者=商品売上テーブル.担当者
where 営業所テーブル.会社名='会社'

ですかね。
そのまま実行すると売上は0(ゼロ)ではなくnullになります。空白ではなく0で出力したければ、何らかの方法で0に置き換えることが必要になりますが、製品、開発環境固有の部分になりますので割愛させていただきます。

おせっかいですが、質問の例のテーブルは構造がおかしいように感じます。単なる例ならばいいのですが.....。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ