2010-12-01 14 views
8

Oracleで複数の行を返すクエリからカンマ区切りの値リストを持つ単一の行を返すことを望んでいます。単一行。 PostgreSQLのOracle 9iのPostgreSQLのarray()/ array_to_string()関数と同じです

これは、配列を使用して、このような機能をarray_to_string達成することができます:

id | name 
--------- 
1 | bob 
2 | alice 
3 | jon 

SQL::

select array_to_string(array(select name from people), ',') as names; 

が返されます:テーブル "人" を考える

names 
------------- 
bob,alice,jon 

Oracle 9iでどのように同じ結果を達成できますか?

おかげで、

マット

+0

助けてくださってありがとうございます。もう少し調査を行い、この回答が私のトリックであることがわかりました:http://stackoverflow.com/questions/468990/how-can-i-combine-multiple-行数はカンマで区切られたリスト内のオラクル/ 4027064#4027064 – walkermatt

答えて

5

ティム・ホールはstring aggregation techniques in Oracleの決定的なコレクションを持っています。あなたは9iの上で立ち往生している場合は

、私の個人的な好みは、あなたが

SELECT string_agg(name) 
    FROM people 

を持っているであろうと(そのページのstring_aggの実装がある)カスタム集計を定義するために、このようなことでしょう。しかし、あなたが定義する必要があります新しいSTRING_AGG関数。新しいオブジェクトの作成を避ける必要がある場合は、他の方法がありますが、9iではPostgreSQLの構文よりも扱いにくいでしょう。

+0

+1とポインタに感謝します。ホール氏は自分のサイトにたくさんのものを持っています! – DCookie

1

10gでは、ティムの記事の最後に記載されているCOLLECTオプションが間違いなく好きです。しかし

SELECT deptno, tab_to_string(CAST(MULTISET(SELECT ename FROM emp 
WHERE deptno = dept.deptno) AS t_varchar2_tab), ',') FROM dept 

9iのである:

そのアプローチの良いところは、同じ基本機能(つまり引数としてコレクションを受け入れ)、骨材として及び多重集合関数としての両方を使用することができるということです利用不可。 SYS_CONNECT_BY_PATHは柔軟性があるのでいいですが、遅くなる可能性があるので注意してください。

関連する問題