プロが教えるわが家の防犯対策術!

お世話になります。
SQL文の作成に難航しています。
どうか知恵を貸してください。
環境:VS2005 Oracl10g
言語:VB.Net

A_TABAL
NO |GroupNO|
1 |A_1
1 |A_1
1 |A_1

B_TABAL
NO |K_NO|K_N
1 |K_1 |項目名1_あ
1 |K_1 |項目名1_い
1 |K_2 |項目名2_あ
1 |K_1 |項目名1_う
1 |K_2 |項目名2_あ
1 |K_2 |項目名2_あ

AテーブルとBテーブルのNOが一致するもので、K_NOがK_1であれば、
項目名1というカラムにいれる。
(複数の場合はカンマ区切りでいれる)
K_NOがK_2であれば、項目名2というカラムにいれる。
(Bテーブルでは
K_1とK_2のレコード数は同じ、実際とってくるときは、NOが同じであれば、重複なものは消すと)

求めたい結果
NO |GroupNO  |項目名1               |項目名2
1  |A_1     |項目名1_あ,項目名1_い,項目名1_う|項目名2_あ

A 回答 (1件)

テストしてないけど、こんな感じかな



select z.NO,z.GroupNO,x.項目名1,y.項目名2
from
(
select NO,sys_connect_by_path(K_N,',') 項目名1
from
(
select b.*,row_number() over(partition by NO,K_NO order by K_N) R
from (select distinct * from B_TABAL where K_NO='K_1') b
)
start with R=1 connect by prior R = R -1 and prior NO=NO
) x,
(
select NO,sys_connect_by_path(K_N,',') 項目名2
from
(
select b.*,row_number() over(partition by NO,K_NO order by K_N) R
from (select distinct * from B_TABAL where K_NO='K_2') b
)
start with R=1 connect by prior R = R -1 and prior NO=NO
) y,
(
select distinct * from A_TABAL
) z
where z.NO=x.NO and z.NO=y.NO
;
    • good
    • 0
この回答へのお礼

返事遅くなってすみません。
これが階層問い合わせというんですか。

ネットで調べてたんですが、関数の使い方がまたっくわからなくて、どうしもなく、ここで質問しました^^;

回答を解析しならが、勉強します。
ありがとうございます。

お礼日時:2008/02/10 16:23

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

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