重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

テーブル結合に関するSQL文について質問させてもらいます。
DBはSQLServer2005です。

下記のような二つのテーブルがあります。

テーブルA
コード
A111
A111B
A222
A333


テーブルB
コード    数量 
A111     1
A111B    2
A222     3
A222B    4


上記2つのテーブルから下記の結果を表示させたいのです。

コード    数量 
A111     1
A111B    2
A222     7
A333     0


テーブルBのコードがテーブルAにある場合、そのまま数量を表示。
ない場合、コードの4桁目まででサマリした合計値を表示させたい。

LEFT JOIN等をいろいろためしてみたのですがうまくいきません。

おわかりの方、方教えてください。

 
 

A 回答 (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の環境が無いので動作確認はしていません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/29 15:01

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するということで。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/08/29 14:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す