• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL 同テーブル、同フィールドの文字列連結)

SQLで同テーブルの文字列連結についての質問

このQ&Aのポイント
  • SQLで同テーブルの文字列連結を実現したいです。親テーブルと子テーブルの関係は1対1であり、子テーブルのカラムBを親テーブルのカラムAに連結して出力したいです。
  • 親テーブルと子テーブルがあり、親テーブルのカラムAと子テーブルのカラムBを連結して出力するSQLを教えてください。
  • Oracle10Gを使用しており、親テーブルと子テーブルがあります。親テーブルのカラムAと子テーブルのカラムBを連結した結果を出力するSQLを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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件までの想定だけど、事前に件数数えて動的にループ数変えてもいいかも。

参考URL:
http://www.geocities.jp/oraclesqlpuzzle/model-22.html
take_PP
質問者

お礼

ご回答ありがとうございます。 芸術的で非常に参考になります。恐れいりました。 また参考URLもありがとうございます。 私も頼ってばかりでは無く勉強します、、

その他の回答 (1)

回答No.1

知っている限り、不可能です。 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 親;

take_PP
質問者

お礼

早速のご回答ありがとうございます。 やはり1つのSQLでは無理なのでしょうか、、 Nは最大値も決まっておらず無限の設計になっています、、 でもご回答頂きました内容も考慮しもう少し悩んでみます ありがとうございます。