- ベストアンサー
テーブルの結合について
- テーブル結合に関するSQL文について質問させてもらいます。DBはSQLServer2005です。
- テーブルAとテーブルBがあり、結果として表示したいデータについて説明します。
- テーブルBのコードがテーブルAに存在する場合は数量を表示し、存在しない場合はコードの4桁目まででサマリした合計値を表示したいと思っていますが、うまくいきません。解決策を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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の環境が無いので動作確認はしていません。
その他の回答 (1)
- Siegrune
- ベストアンサー率35% (316/895)
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するということで。
お礼
早速のご回答ありがとうございました。 大変参考になり解決できました。 not exitsは使ったことがなかったため勉強になりました。
お礼
早速のご回答ありがとうございました。 大変参考になり解決できました。 group by 句の中にcaseをいれて使うことを知りませんでした。 大変勉強になりました。