ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3759383 1つのカラムに複数レコードの値を・・・
質問者:sinomori お世話になります。
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_あ
困り度:
  • すぐに回答を!
質問投稿日時:
08/02/09 16:41

回答

ANo.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
;
回答者:k_o_r_o_c_h_a_n
種類:回答
どんな人:一般人
自信:参考意見
回答日時:
08/02/09 19:28
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼返事遅くなってすみません。
これが階層問い合わせというんですか。

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

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