SQLでの文字列結合を教えてください。
(oracle9i使用)
table1とtable2があります。
(table1)
code name tel
-------------------
10 aoki 090-
20 kai 090-
(table2)
code item
-----------
10 A
10 B
10 C
20 A
20 C
この2つの表を使って
code name item
-------------------
10 aoki A B C
20 kai A C
という結果にしたいのですが
どのようなSQLを組めば良いのか教えてください!
↓どうしてもこうなってしまいます・・・
code name item
--------------------
10 aoki A
10 aoki B
10 aoki C
20 kai A
20 kai C
No.2
- 回答日時:
こちらの方が、判りやすいかもしれませんね。
http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cg …
<<私は、上記サイトの発言者ではありませんが、よく利用させていただいております。Oracleのことなら、こちらで聞いてみてはいかがですか?>>
No.1ベストアンサー
- 回答日時:
貴方のSQLの習得度はどれくらいでしょうか?
ご質問の内容ですが、プロシジャを作成するか、
以下の方法を応用するしかないようです。
-----------------------------------------
Oracle9iでのオブジェクト指向機能を利用して
同じキー項目の特定列をカンマ編集で出力。
この集計関数 list() を使って
ALL_TAB_COLUMNS から CREATE TABLE文を
SQLで生成してみます。
-- オブジェクトと関数の定義
create or replace type ListImpl as object
(
listv VARCHAR2(4000),
static function ODCIAggregateInitialize(sctx IN OUT ListImpl)
return number,
member function ODCIAggregateIterate(self IN OUT ListImpl,
value IN varchar) return number,
member function ODCIAggregateTerminate(self IN OUT ListImpl,
returnValue OUT varchar, flags IN number)
return number,
member function ODCIAggregateMerge(self IN OUT ListImpl,
ctx2 IN ListImpl) return number
);
/
show error
create or replace type body ListImpl is
static function ODCIAggregateInitialize(sctx IN OUT ListImpl)
return number is
begin
sctx := ListImpl(null);
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT ListImpl,
value IN varchar) return number is
begin
if (self.listv is null) then
self.listv := rtrim(value);
elsif (value is not null) then
self.listv := self.listv||','||rtrim(value);
end if;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN OUT ListImpl,
returnValue OUT varchar, flags IN number) return number is
begin
returnValue := self.listv;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT ListImpl,
ctx2 IN ListImpl) return number is
begin
if (self.listv is null) then
self.listv := ctx2.listv;
elsif (ctx2.listv is not null) then
self.listv := self.listv||','||ctx2.listv;
end if;
return ODCIConst.Success;
end;
end;
/
show error
create or replace function LIST(input varchar) return varchar
parallel_enable aggregate using ListImpl;
/
show error
【実行例】
column list format a40
select deptno,list(ename) "LIST" from scott.emp
group by deptno;
DEPTNO LIST
---------- ----------------------------------------
10 CLARK,KING,MILLER
20 SMITH,FORD,ADAMS,SCOTT,JONES
30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
【実行例-その2】
-- interval などの型には対応していませんが
-- 簡単な(?) CREATE TABLE文を作成する例
column "CREATE TABLE" format a40 word_wrap
select 'CREATE TABLE "'||owner||'"."'||table_name||'" ('||
list(
'"'||column_name||'" '||
data_type||
case
when data_type = 'NUMBER'
then
case
when data_scale is not null
and data_precision is not null
then '('||data_precision||','||data_scale||')'
when data_precision is not null
then '('||data_precision||')'
end
when data_type like '%CHAR%'
then '('||data_length||')'
end||
case when nullable='N' then ' NOT NULL' end
)|| -- list 関数の終わり
');' as "CREATE TABLE"
from (select owner,table_name,column_name,
data_type,data_precision,data_scale,
data_length,
nullable
from all_tab_columns
where owner in ('OE','HR')
order by owner,table_name,column_id)
group by owner,table_name
;
CREATE TABLE
----------------------------------------
CREATE TABLE "HR"."JOBS" ("JOB_ID"
VARCHAR2(10) NOT NULL,"JOB_TITLE"
VARCHAR2(35) NOT NULL,"MAX_SALARY"
NUMBER(6,0),"MIN_SALARY" NUMBER(6,0));
CREATE TABLE "HR"."REGIONS"
("REGION_ID" NUMBER NOT
NULL,"REGION_NAME" VARCHAR2(25));
(以下省略)
--------------------------------------------
同様な質問が参照URLにありました。
参考URL:http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cg …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server SQLについて質問です。 a表がありその表には従業員名を保存するname列があります。 LIKE演算 1 2022/05/17 17:49
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- その他(地域情報・旅行・お出掛け) AOKIの前会長が逮捕されましたが、表参道に新しくできたAOKIグループのビルはどうなりますか? 1 2022/08/17 17:07
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 リスト
-
リスト構造
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
-
正負を反転させて出力するプロ...
-
#define _CRT_SECURE_NO_WARNIN...
-
error C2143: 構文エラー : ';'...
-
プログラムでの数字につく”f”の...
-
既定のコンストラクタがありま...
-
hit&bolwのプログラミングがで...
-
C言語 配列と関数の練習問題
-
c言語
-
std::set<int> で、ある値が何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InvokeMemberメソッドとは何を...
-
構造体のリスト削除
-
C# ref引数のnull判定
-
双方向リストのバブルソートに...
-
コールバック関数はnullになら...
-
今度はdoubly linked listの問...
-
C♯ 2段構造のcontextMenuStrip?
-
空のカラムを挿入
-
C#でのEXCEL出力に関して
-
「Nz」は何て読むのでしょうか?
-
ソートを自作
-
ばばぬきプログラムについて
-
バブルソートを使って文字列を...
-
ポインタを使った連結リストへ...
-
C言語 dequeue
-
API 録音 MCI
-
マイナスからプラスへ転じた時...
-
Enterキーを押されたら次の処理...
-
2÷3などの余りについて
-
C言語での引数の省略方法
おすすめ情報