• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テーブルの結合について)

テーブルの結合について

このQ&Aのポイント
  • テーブル結合に関するSQL文について質問させてもらいます。DBはSQLServer2005です。
  • テーブルAとテーブルBがあり、結果として表示したいデータについて説明します。
  • テーブルBのコードがテーブルAに存在する場合は数量を表示し、存在しない場合はコードの4桁目まででサマリした合計値を表示したいと思っていますが、うまくいきません。解決策を教えてください。

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

full joinとcase式を使って、 select case when a.コード is null then substring(b.コード,1,4) else a.コード end as コード ,isnull(sum(数量),0) as 数量 from テーブルA as a full join テーブルB as b on (a.コード = b.コード) group by case when a.コード is null then substring(b.コード,1,4) else a.コード end order by コード; でどうでしょうか。 SQLServerの環境が無いので動作確認はしていません。

cocoa_wk
質問者

お礼

早速のご回答ありがとうございました。 大変参考になり解決できました。 group by 句の中にcaseをいれて使うことを知りませんでした。 大変勉強になりました。

その他の回答 (1)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

select コード,sum(数量) from ( select テーブルB.コード,テーブルB.数量 from テーブルB left join テーブルA on テーブルB.コード = テーブルA.コード union select テーブルB.コード,テーブルB.数量 from テーブルB left join テーブルA on left(テーブルB.コード,4) = テーブルA.コード and テーブルB.コード not exists (select テーブルA.コード from テーブルA x where テーブルB.コード = x.コード) ) group by コード order by コード といった感じのsqlでどうでしょう? ポイントは、テーブルBのコードがテーブルAにあるときとないときで別々にJoinしてunionした結果を group byするということで。

cocoa_wk
質問者

お礼

早速のご回答ありがとうございました。 大変参考になり解決できました。 not exitsは使ったことがなかったため勉強になりました。

関連するQ&A