- ベストアンサー
SQLで同テーブルの文字列連結についての質問
- SQLで同テーブルの文字列連結を実現したいです。親テーブルと子テーブルの関係は1対1であり、子テーブルのカラムBを親テーブルのカラムAに連結して出力したいです。
- 親テーブルと子テーブルがあり、親テーブルのカラムAと子テーブルのカラムBを連結して出力するSQLを教えてください。
- Oracle10Gを使用しており、親テーブルと子テーブルがあります。親テーブルのカラムAと子テーブルのカラムBを連結した結果を出力するSQLを教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
model句の出番ですな。 SELECT 親テーブル.ID, 親テーブル.カラムA, ConcatT.カラムB FROM 親テーブル LEFT OUTER JOIN ( SELECT ID, SUBSTR(ConcatカラムB, 2) AS カラムB FROM 子テーブル MODEL RETURN UPDATED ROWS PARTITION BY(ID) DIMENSION BY(Row_Number() OVER(PARTITION BY ID ORDER BY 枝番)) MEASURES(カラムB, CAST(NULL AS VARCHAR2(2)) AS ConcatカラムB) RULES ITERATE(100) UNTIL (PRESENTV(カラムB[ITERATION_NUMBER + 2], 1, 0) = 0) (ConcatカラムB[0] = ConcatカラムB[0] || ' ' || カラムB[ITERATION_NUMBER + 1]) ) ConcatT ON 親テーブル.ID=ConcatT.ID ORDER BY 親テーブル.ID; 枝番100件までの想定だけど、事前に件数数えて動的にループ数変えてもいいかも。
その他の回答 (1)
- Chronos198
- ベストアンサー率30% (105/349)
知っている限り、不可能です。 Nが有限であれば以下のような方法もとれなくはないですが・・・。 Select ID, カラムA, ( Select カラムB From 子 Where 子.ID=親.ID And 枝番=1 )||( Select カラムB From 子 Where 子.ID=親.ID And 枝番=2 )||( Select カラムB From 子 Where 子.ID=親.ID And 枝番=3 )||…||( Select カラムB From 子 Where 子.ID=親.ID And 枝番=N ) From 親;
お礼
早速のご回答ありがとうございます。 やはり1つのSQLでは無理なのでしょうか、、 Nは最大値も決まっておらず無限の設計になっています、、 でもご回答頂きました内容も考慮しもう少し悩んでみます ありがとうございます。
お礼
ご回答ありがとうございます。 芸術的で非常に参考になります。恐れいりました。 また参考URLもありがとうございます。 私も頼ってばかりでは無く勉強します、、