SQL結合条件の使い方と結合抽出の方法

このQ&Aのポイント
  • SQL結合条件を使ってテーブルを結合し、結合抽出(テーブルの表示)を行う方法について解説します。
  • 結合抽出の方法はこのままでWHERE句に条件を追加し、計算も行いたい場合の方法についても解説します。
  • 具体的なSQLの例を使用して説明し、初心者でも理解しやすくするために工夫しました。
回答を見る
  • ベストアンサー

SQL結合条件

結合抽出(テーブルの表示)の方法はこのままで WHERE句にあるようなの条件を付け加え 計算も行いたいのですが、よい方法はありませんか? どなたか、ご享受ください。 SELECT MS.商品コード, MS.倉庫コード, MS.現在庫数, ISNULL(SUM(UTP.数量),0)  T売上明細ファイル1OR4, MS.現在庫数 + ISNULL(SUM(UTP.数量),0)  帳簿在庫 FROM T商品別倉庫在庫 MS LEFT JOIN T売上明細ファイル UTP ON MS.倉庫コード = UTP.倉庫コード AND MS.商品コード = UTP.商品コード --WHERE --T売上明細ファイル UTP PLUS条件 -- UTP.売上区分コード = 1 --OR --UTP.売上区分コード = 4 GROUP BY MS.商品コード, MS.倉庫コード, MS.現在庫数

  • ukatu
  • お礼率41% (15/36)

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

集計(GROUP BY)がかかる部分を誤ってました。 以下でテストしてみてください。 SELECT MS.商品コード, MS.倉庫コード, MS.現在庫数, ISNULL(UTP.数量合計,0) T売上明細ファイル1OR4, MS.現在庫数 + ISNULL(UTP.数量合計)  帳簿在庫 FROM T商品別倉庫在庫 MS LEFT JOIN ( select 商品コード, 倉庫コード,SUM(数量) 数量合計 from T売上明細ファイル WHERE 売上区分コード = 1 OR 売上区分コード = 4 GROUP BY 商品コード, 倉庫コード ) UTP ON MS.商品コード = UTP.商品コード AND MS.倉庫コード = UTP.倉庫コード order by MS.商品コード, MS.倉庫コード ;

ukatu
質問者

お礼

うーん。なるほど難しいですね。 でもよくわかりました。 ありがとうございました。 また、機会があれば教えてください。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

Oracleだったら以下のような感じ(未テスト) でもSQLServerなんですよね? T売上明細ファイルを集計した結果をテーブルに見立ててトライしてみてください。 Fromのテーブルに集計結果を持ってくるところがミソ。 SELECT MS.商品コード, MS.倉庫コード, MS.現在庫数 + ISNULL(UTP.10R4,0)  帳簿在庫 from T商品別倉庫在庫 MS, ( select 倉庫コード, 商品コード, SUM(UTP.数量) 1OR4 from T売上明細ファイル where 売上区分コード = 1 OR 売上区分コード = 4 ) UTP where MS.倉庫コード = UTP.倉庫コード(+) AND MS.商品コード = UTP.商品コード(+) GROUP BY MS.商品コード, MS.倉庫コード, MS.帳簿在庫 ;

関連するQ&A

  • SQL文を教えて下さい

    VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。     売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。     得意先マスタの全得意先を取得する必要があります。     すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称,       クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名  FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。

  • SQLの書き方(UPDATE文)

    SQLの書き方の質問です。 売上Tと商品Mというテーブルがあったとして、 売上Tには商品コード、数量、金額という項目が 商品Mには商品コード、単価という項目が それぞれあったとします。 売上Tの金額=売上T.数量×商品M.単価 この売上Tの金額を更新するのに、update文でできるだけシンプルに高速に動くSQL文を作成したいのですが、どのような書き方がよいと思いますか? 件数は例えば売上が100万件、商品が10万件あった場合を想定して。 以上よろしくお願いいたします。

  • SQLについての質問

    教えてください!! テーブルAに商品の売上情報(JANコード、売上金額、売上日)、テーブルBに商品マスタ情報(JANコード、更新日付、仕入区分、・・・)があります。欲しい情報は「仕入区分=1を満たす特定期間のJANコード別の売上金額合計」です。更新日付は他の商品マスタ情報を変更する都度付与される日付ですが、仕入区分はどの更新日付でも同じJANコードなら同じ値です。従って、単純に「仕入区分=1のJANコードの売上をSUM」で指定すると、重複行が発生し、正確な売上が出ません。例えば「同一JANコードなら最新の更新日付の仕入区分のみ見る」といった条件を加えるにはどのようにすればよいのでしょうか? 具体的なSQL文で教えてもらえると有り難いです。

  • SQLが分かりません

    SQLの初心者です。 ACCESSで売上げ管理をしようと考えています。 売上げに関するテーブルは以下のようになっています。 ●売上げヘッダ テーブル   伝票番号(キー)   売上日   売上げ金額    : ●売上げ明細 テーブル   伝票番号(キー)   枝番(キー)   商品コード   商品名   単価   数量   値引金額    : 値引金額は商品ごとに決まり、値引きしなければ0が、値引きがあればその金額が入ります。 売上げ一覧を表示する時に、以下のようなイメージで、 ワークテーブルを作って、値引きがあれば「あり」と画面に表示させたいのです。 ※無い時は何も表示させません 伝票番号  売上日  売上げ金額 値引き有無 9999 2004/1/1 10,000 10000 2004/1/2 1,500 あり 10001 2004/1/2 20,000 10002 2004/1/3 18,900 10003 2004/1/4 23,500 あり 1回のSQLで実行したいのですが、SQLには詳しくないので、 どのように書けばよいか分かりません。 よろしくお願いします。 値引き区分が無ければ、売上げヘッダを見るだけなのですが、 値引きがあるかどうかは、売上げ明細まで見なければいけないので、 SQLの書き方が分からないのと、以下のようなワークテーブルを 作る必要があると思うのですが、どうなのでしょうか。 ●ワーク テーブル   伝票番号   売上日   売上げ金額   値引き区分

  • Accessのテーブル結合方法

    Access2000で商品の仕入と売上の受払を一覧表にしようとしているのですがうまくいきません。 テーブルは商品仕入と、売上の2つがあって 仕入には荷受した日、商品コード、数量、仕入金額と値入金額、仕入先があります。 売上には売上した日、商品コード、レジ番号、利用者、数量、売上金額となっています。 この2つを1枚の表にして、商品コード別に在庫が動いた日、適用(売上ならレジ番号、利用者を表記して、仕入なら仕入先を明記)、仕入数量、仕入金額、値入金額、売上数量、売上金額となるようにしたいのですが、うまくいきません。 ユニオンクエリを使ったり、選択クエリで単純にならべたりしたのですが、私の知識ではどうにもならなくなりました。 よろしくご指導のほどお願いします。

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

    SQLについて質問があります。 あるテーブルの項目が、倉庫名、商品名、在庫数量とあった場合、 違う倉庫にある同一商品が数件あったとします。 例えば、  A倉庫 商品●● 10個  B倉庫 商品●● 20個  C倉庫 商品●● 5個  A倉庫 商品×× 3個  B倉庫 商品×× 15個  C倉庫 商品×× 0個 上記のような場合、●●商品についてはどれも在庫が1個以上 あるので通常に3件取得したいのですが、××商品はC倉庫が在庫0個です。 上記の様に0個の件数が1件でもあったら、その商品については 取得しない様なSQL式を1発で組むことは可能でしょうか? (上記の例の場合、●●商品3件のみ取得したい) 何故、SQL初心者で初歩的な質問で申し訳ありませんが よろしくお願い致します。

  • ♪Oracle SQL 処理が成功した時のみコミットする方法

    初歩的質問で申し訳ないのですがご教授下さい。 ※1のような、複数行のSQL文を一括実行し、全てのレコードがエラー発生無い場合のみコミット処理をして、 1行でもエラーがある場合全てをロールバックしたいのですが。 どのようにすれば良いのでしょうか。。 ■DB Oracle9i Enterprise Edition Release 9.2.0.1.0 ※1 INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 6, 4, 1, 1); INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 7, 4, 2, 2); INSERT INTO TT_売上明細( 売上番号, 明細番号, 商品コード, 売上数量) VALUES( 8, 4, 3, 3);

  • 2つのテーブルの合算値に関して

    教えて下さい。 SQLに関してです。 ある2つのテーブルの集計(数量の合算)をSQLで行いたいと考えています。 そこで、UNION ALL を使い集計させる事ができましたが、その中で、1つのテーブルに 条件を加えたいと考えています。 つまり、副問い合わせのような形にできないかと考えています。 《テーブル》  T_在庫日次      品目番号   場所コード   数量   処理区分  T_在庫月次      品目番号   場所コード   数量 《現状のSQL》 Select 場所コード,品目番号, SUM(数量) AS 数量 From ( Select 場所コード,品目番号, 数量 From T_在庫日次 UNION ALL Select 場所コード,品目番号, 数量 From T_在庫月次 ) Group By 場所コード,品目番号 上記のSQLに対し、T_在庫日次 の処理区分が ‘10’ のデータに対するT_在庫日次とT_在庫月次の数量の 合計を求めたいと考えています。 SQLの記述で計算までして取得する事はできないでしょうか??? 教えて頂ければ幸いです。 よろしくお願いします。

  • Accessで在庫管理する時の在庫数の出し方

    在庫管理をaccessで行おうとしています。 在庫数の出し方が分かりません。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) とすると、それらしい数は表示されるのですが、次のレコードで同じ商品(助成物コード)を指定すると、前のレコードの在庫と同じ数になってしまいます。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) した結果を次の『=DLookUp("[在庫数]"』の在庫数に引き継いでもらいたいのですが、どうすれば良いか分かりません。 上記で『助成物コード』が商品コードで、 『数量』が受注数です。 他にどんな情報があれば良いか分かりませんので、不足している情報があればご指摘下さい。

  • Accessのフォームでの合計欄を二つにわけたい

    テーブル1;売上明細T フィールド名;売上明細番号、商品コード、数量、摘要 テーブル2;商品T フィールド名;商品コード、商品名、単価 クエリで売上明細と商品Tをつなぎ、下記のように表示します。 商品コード 商品名 摘要  数量  単価 明細計                  (数量*販売単価) 001    物件1  作業代  1  500 500 002    物件2  作業代  2  400 800 051    物件51  作業代  1  500 500 051    物件51  交通費  1  350 350  上記クエリを元にフォームを作成(帳票形式)して、 テキストボックスで課税対象計(作業代計)と、非課税対象計(交通費計) のボックスをもちたいのですが可能でしょうか? 最終的には、売上伝票フォームに売上明細フォームをサブフォームで 取り込み、売上伝票上で合計金額を表示させたいと思っています。 よろしくお願いします。