QA@IT

SQL あるカラムの最大値レコードにのみ結合

3294 PV

初心者です。SQL文で困っています。
どなたかご教授頂けたらと思います。

環境は、ORACLE 11Gです。
たとえば、以下のようなデータがあるとします。
*を主キーとします。

Aテーブル
コード |区分 |数量A
0001 |1 |100
0001 |2 |200
0001 |3 |300
0002 |1 |400
0002 |2 |500
0003 |1 |600

Bテーブル
*コード |数量B
0001 |10
0002 |20
0004 |40

欲しい結果
コード |区分 |数量A |数量B
0001 |1 |100 |
0001 |2 |200 |
0001 |3 |300 |10
0002 |1 |400 |
0002 |2 |500 |20
0003 |1 |600 |
0004 | | |40

Aテーブルのコード毎の区分の最大値を持つレコードにBテーブルの数量Bを結合したいです。
さらに、Aテーブルにコードが存在しない場合は、数量Bのみ残したいです。

以上ですが、よろしくお願いします。

回答

分析関数を用いたSelect分をサブクエリーとして使用し
Full Outerで結合すると良いです。

当方に環境がないので試していませんが以下のような感じでどうでしょう。

Select NVL(A.コード, B.コード) コード, A.区分, A.数量A, B.数量B
From (Select コード, 区分, 数量A, ROW_NUMBER() Over (Partition By コード order by 区分 desc) as row_number From Aテーブル) As A
Full Outer
Bテーブル As B on A.コード = B.コード and A.row_number = 1

A.row_number = 1をWhere句に書く場合or A.row_number is nullを付加した方が良いです。

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。