LISTAGG関数
行列の入れ替えを行う関数としてLISTAGGがあります。この関数は取得した行データを単一の文字列に連結します。以前、結果の文字列が桁あふれした場合の対応方法について、[Oracle Database 12c の新機能] (https://qiita.com/plusultra/items/fc0ccc88490761b206fe) として書きました。
Oracle Database 19cの新機能
Oracle Database 19cでは、この関数にDISTINCT句を指定して、出力データに一意性を指定できるようになりました。省略時は従来通りすべてのデータを出力します。この動作を明示するために、ALL 句を指定することもできます。
元データ
簡単なデータを用意します。Oracle Database 19cはまだオンプレミス版が提供されていないため、LiveSQL を使っています。data1テーブルのc2列を行列変換します。
DISTINCT句
DISTINCT句を使ってc2列の値を一意にまとめて出力しています。
ALL句
DISTINCT句の替わりにALL句を指定するか省略すると従来通りの出力になります。
ソート順
WITHIN GROUP (ORDER BY)句と組み合わせることで出力順序を指定することもできます。これは従来と同じ動作です。