select ステートメントの結果を 1 行に連結しようとしています。
例: この select ステートメントの出力の場合:
Name
ABC
DEF
GHI
次の出力が必要でした:
名前
1 ABC, 2 DEF, 3 GHI
(各行の前に行番号を追加する必要があることを意味します
) wm_concat() 関数を使用していますが、次の o/pが表示されABC,DEF,GHI
ます。
これに似たものが欲しいようです。このlistagg()
関数は Oracle 11g+ で使用できます。
select listagg(cast(rownum as varchar2(20))||' '|| name, ', ')
within group (order by name) name
from yourtable
デモで SQL Fiddle を参照してください
結果:
| NAME |
-----------------------
| 1 ABC, 2 DEF, 3 GHI |
Oracle 11g をお持ちでない場合は、次を使用できますwm_concat()
。
select wm_concat(cast(rownum as varchar2(20))||' '|| name) name
from yourtable
さらに、WITH 句を使用できます。
WITH tmp AS
(
:your_select_statement
)
SELECT
LISTAGG(rownum || ' ' || :your_column, ', ')
WITHIN GROUP (ORDER BY :your_column) tmp
FROM tmp;
次に、rownum はプライマリ テーブルからではなく :your_select_statement の結果を持つ tmp 一時テーブルからのものです。