- ベストアンサー
Oracle10gのSQL文についての質問です。
Oracle10gのSQL文についての質問です。 [A]テーブルに CODE(key) NAME と、フィールドがあります。 A NAME-A B NAME-B C NAME-C D NAME-D E NAME-E と、データが入っています。 [B]テーブルに CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 A 3 BIKO-A-3 B 1 B 2 B 3 C 1 C 2 BIKO-B-2 C 3 D 1 BIKO-D-1 D 2 BIKO-D-2 D 3 BIKO-D-3 E 1 E 2 E 3 BIKO-E-3 と、データが入っています。 結果が CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 BIKO-A-1 A 3 BIKO-A-1 B 1 (null) B 2 (null) B 3 (null) C 1 BIKO-B-2 C 2 BIKO-B-2 C 3 BIKO-B-2 D 1 BIKO-D-1 D 2 BIKO-D-1 D 3 BIKO-D-1 E 1 BIKO-E-3 E 2 BIKO-E-3 E 3 BIKO-E-3 と、したいのです。 つまり、[B]テーブルのLINEが一番小さいBIKOが欲しいのです。 色々と考えてみましたが、解りません。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
select X.CODE,X.LINE,Y.BIKO from B X, (select CODE,BIKO,row_number() over(partition by CODE order by LINE) R from B where not(BIKO is null)) Y where X.CODE=Y.CODE(+) and Y.R(+)=1; テーブルAの使い道が書かれていないので、全く使わない。
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
1)select CODE,LINE from B where BIKO is not null;--で備考があるレコードだけ抽出。これをTとする。 2)select CODE,min(LINE) MINL from T group by CODE;--でCODE毎の最小行を抽出。これをSとする。 3)select B.CODE,B.BIKO from B,S where B.CODE=S.CODE and B.LINE=S.MINL;--CODEとその最小行に対応する備考を抽出。これをUとする。 4)select B.CODE,B.LINE,U.BIKO from B,U where B.CODE(+)=U.CODE;--でCODEに対応する備考を外部結合する。 ――とか。試さないで書いているから間違ってるかも。
補足
お返事をありがとうございます。 select B.CODE,B.LINE,U.BIKO from (select CODE,LINE from B where BIKO is not null) T, (select CODE,min(LINE) MINL from T group by CODE) S, (select B.CODE,B.BIKO from B,S where B.CODE=S.CODE and B.LINE=S.MINL) U, B where B.CODE(+)=U.CODE と、したのですが、エラーになってしまいます。 もう少し具体的にご指導を頂ければ幸いです。 また、[A]テーブルが出てこないのも気になります。 宜しくお願い致します。
お礼
お返事が遅くなり、申し訳ございません。 納得の行く結果が得られました。 ありがとうございました。 今後とも、宜しくお願い致します。