以下の様にSQLで実現したいと思っております。
なお、DBはOracle10Gを利用しております。
親と子テーブルがあり以下の構成となっております。
■親テーブル
ID,カラムA
1 ,AA
2 ,BB
3 ,CC
■子テーブル
ID,枝番,カラムB
1 ,1 ,あああ
1 ,2 ,いいい
2 ,1 ,ううう
2 ,2 ,えええ
2 ,3 ,おおお
3 ,2 ,かかか
※IDカラムは親テーブルと子テーブルは1:1です
子テーブルの枝番カラムはIDに対してN件です。
やりたい事としては、上記の2テーブルより、以下の結果を出力したいです。
ID,カラムA,カラムB
1 ,AA ,あああ いいい
2 ,BB ,ううう えええ おおお
3 ,CC ,かかか
親テーブルを元にして、
親テーブルに紐づく子テーブルのカラム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 …
ご回答ありがとうございます。
芸術的で非常に参考になります。恐れいりました。
また参考URLもありがとうございます。
私も頼ってばかりでは無く勉強します、、
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 親;
早速のご回答ありがとうございます。
やはり1つのSQLでは無理なのでしょうか、、
Nは最大値も決まっておらず無限の設計になっています、、
でもご回答頂きました内容も考慮しもう少し悩んでみます
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Oracle SQL update方法 2 2022/06/22 14:07
- PostgreSQL postgreSQL カラムの全ての値を取得したい 3 2022/10/07 12:33
- Oracle SQLの書き方について 1 2023/04/13 09:54
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL sqlにおけるテーブル名と各カラム名って 具体的に何ですか? 私は良くphpmyadminを使います 3 2023/05/18 14:10
- MySQL テーブル作成時のカラムについて 2 2022/08/27 21:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL serverで、 テーブル:T カ...
-
カラムの存在チェック
-
異なるスキーマからデータを抽...
-
Viewにインデックスは張れ...
-
データを削除しても表領域の使...
-
特定のスキーマのテーブルを一...
-
Access レコードを追加できませ...
-
CLOB型へのINSERT
-
SQLでスキーマ名(所有者名)の...
-
ORA-00959: 表領域'****'は...
-
datapumpの実行方法について
-
表領域の使用率がもうすぐ100%
-
主キー以外の項目にNotNull制約...
-
DELETE文でFROM句を省略した場合
-
Data Pump で大量データインポ...
-
アナライズとインデックス作成...
-
count(1)とcount(*)の違い
-
select insert 句
-
トリガーにてUTL_FILEパッケー...
-
テーブルからのselectにおいて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カラムの存在チェック
-
INSERT時に発番を行いたい
-
GROUP BY で列名は指定できない...
-
ACCESS 1クエリでの複数ALTER文
-
カラム情報とはなんですか?
-
データーベース設計段階での質...
-
Viewにインデックスは張れ...
-
データを削除しても表領域の使...
-
異なるスキーマからデータを抽...
-
CLOB型へのINSERT
-
Data Pump で大量データインポ...
-
ACCESS 複数テーブル・複数フィ...
-
postgreSQLのint型は桁数指定が...
-
SQLでスキーマ名(所有者名)の...
-
ORA-00959: 表領域'****'は...
-
datapumpの実行方法について
-
テーブルからのselectにおいて...
-
INDEXの無効化
-
DELETE文でFROM句を省略した場合
-
検索結果の列数を動的に変更したい
おすすめ情報