- - PR -
1:Nの関係にあるデータを1列1行内に結合して表示
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2006-06-23 09:38
Oracle10g
自分なりに調べて、過去ログを色々みてみましたが、 わかりませんでした。。。 以下のようなテーブルが存在し、Table_AのKey_Aに対応する テーブルBのKey_Bがあります。 Tabla_AとTabale_Bは、1:Nの関係で成り立っており、 結合して一行表示を行いたいです。 Table_A Key_A ----------- 1 2 3 4 Table_B Key_B Data_B ------------------ 1 A1 1 A2 1 A3 2 A4 2 A5 3 A6 表示したい結果 ------------------ 1 A1,A2,A3 2 A4,A5 3 A6 Table_B.Data_Bは一行で表示し、複数行ある場合はカンマ区切りとしたい。 よろしくお願い致します。 | ||||
|
投稿日時: 2006-06-23 09:48
無理じゃないですかね。
過去ログに、そういう事をする関数を作るって話題があったと思いますが。 (私自身、あまり理解してないので薦めるのもナンですが、関係演算について調べてみるとRDBで出来る事と出来ない事がイメージしやすくなるんじゃないかな?) | ||||
|
投稿日時: 2006-06-23 11:16
まったく参考にならないとは思いますが
SQL Server2000で試しにやってみました。 --ユーザ定義関数 ここから CREATE FUNCTION dbo.FncTest(@param varchar(2)) RETURNS char(8) AS BEGIN DECLARE @Key_B varchar(2) DECLARE @Data_B varchar(50) DECLARE crTable cursor for SELECT Key_B ,Data_B FROM Table_B AS B WHERE Key_B = @param --カーソルオープン OPEN crTable DECLARE @text varchar(100) SET @text = '' --フェッチ FETCH NEXT FROM crTable INTO @Key_B ,@Data_B WHILE @@fetch_status = 0 BEGIN SET @text = @text + @Data_B + ',' --次をフェッチ FETCH NEXT FROM crTable INTO @Key_B ,@Data_B --エラー処理 IF @@error <> 0 BEGIN BREAK END END --カーソルクローズ CLOSE crTable DEALLOCATE crTable IF LEN(@text) > 0 BEGIN SET @text = LEFT(@text,LEN(@text)-1) END ELSE BEGIN SET @text = NULL END RETURN @text END --ユーザ定義関数 ここまで --実行するSQL SELECT dbo.FncTest(A.Key_A) AS Data FROM Table_A AS A WHERE dbo.FncTest(A.Key_A) IS NOT NULL #顔文字を使わないよう編集 [ メッセージ編集済み 編集者: むら 編集日時 2006-06-23 11:17 ] | ||||
|
投稿日時: 2006-06-23 11:37
「表示」っていうのはどこに表示するものでしょうか。なんらかのアプリケーションで
あれば、アプリケーション側で対応すべきです。 | ||||
|
投稿日時: 2006-06-23 11:45
確かに通常であればそうですね。 でも、できるだけクエリで吸収することが求められる場合もありますね 「求められること自体に問題が多い」ことが多そうですが・・・ | ||||
|
投稿日時: 2006-06-23 12:53
アプリで対応させるのが一番早いんでしょうかね。。。
もう少し自分でも検討してみます。 | ||||
1
