これを回答として書くのは嫌いですが、Oracleベース(Alex Pooleのコメントを参照)とウィリアム・ロバートソンのWebサイト(Oracle-Baseの記事を参照)の両方でsys_connect_by_path
ソリューションが完全ではないことが判明しました。コメントには収まりません。
オラクル・ベースのリンク:https://oracle-base.com/articles/misc/string-aggregation-techniques#row_number ウィリアム・ロバートソンのウェブサイトは:http://www.williamrobertson.net/documents/one-row.html
オラクル・ベースのソリューションは、一つだけが必要とされているrow_number()
には、2つの呼び出しを使用し、それが代わりにconnect_by_isleaf
の集計クエリを使用しています。ウィリアムが最初に投稿した解決策かもしれませんが、集計の代わりにrow_number()
コールとconnect_by_isleaf
という1つだけを使用することで、彼のページは現在のところ優れたソリューションを提供しています。
しかし、ウィリアムのページでは、彼はltrim()
を使用して、どの文字をトリミングするかを示す引数がないので、実際には効果がありません。そして、row_number()
の値から1を減算します。その結果、カンマで区切られた各リストの最初のトークンは除外されます。
これは修正された解決策です。私はこれに独創性がないと主張する。この図は標準SCOTT
スキーマのEMP
テーブルで実行されています。
select deptno
, ltrim(sys_connect_by_path(ename,','), ',') as name_list
from (select deptno
, ename
, row_number() over (partition by deptno order by ename) as seq
from emp)
where connect_by_isleaf = 1
connect by seq = prior seq + 1 and deptno = prior deptno
start with seq = 1;
DEPTNO NAME_LIST
------ ------------------------------------
10 CLARK,KING,MILLER
20 ADAMS,FORD,JONES,SCOTT,SMITH
30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
[さまざまな技術がここに表示されています](https://oracle-base.com/articles/misc/string-aggregation-techniques)。 'sys_connect_by_path'は、あなたが既にそれらをランキングしているので、開始する場所かもしれません。 –
ありがとうございます。私はこれを見ましたが、LISTAGG、wm_concatとCOLLECTは有効になっておらず、私自身の関数を書くためのアクセス権がありません。 OK:多分私はsys_connect_by_pathを働かせることができます – delica
@delicaこれはOBIEEのダイレクトデータベースリクエストに入りますか?それともRPDに入れようとしているのですか? –